场景简介

当我们需要创建唯一实例的对象是可以使用单例模式,当我们需要创建一个类型的多个不同实例的时候可以考虑使用工厂方法,或者抽象工厂;当我们需要创建一个特别复杂的对象时,它可能有很多各种各样的是属性,如果使用传统的构造函数,参数个数,参数顺序等诸多条件就让对象的创建过程变得异常繁琐;为此便有了建造者模式。

建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

Car

public class Car{

    private String name;
    
    private String color;
    
    private Integer size;
    
    private String window;
    
    public Car(CarBuilder builder){
         this.name =builder.name;
         this.size =builder.size;
         this.color =builder.color;
         this.window =builder.window;
    }
    
    // getter setter 省略

}

public class CarBuilder{

    private String name;
    
    private String color;
    
    private Integer size;
    
    private String window;

   public CarBuilder(){
   }
   
   public CarBuilder setName(String name){
    	this.name =name;
        return this;
   }
   
   public CarBuilder setColor(String color){
    	this.color =color;
        return this;
   }
   
    public CarBuilder setWindow(String window){
    	this.window =window;
        return this;
   }
   
     public CarBuilder setSize(Integer size){
    	this.size =size;
        return this;
   }
   
   public Car build(){
            return new Car(this);
   }
}

建造者(Builder)模式创建的是复杂对象,其产品的各个部分经常面临着剧烈的变化,但将它们组合在一起的算法却相对稳定,所以它通常在以下场合使用。

创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的。创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。

使用场景

  • 相同的⽅法,不同的执⾏顺序,产⽣不同的事件结果时,
    可以采⽤建造者模 式。

  • 多个部件或零件,都可以装配到⼀个对象中,但是产⽣的
    运⾏结果⼜不相同 时,则可以使⽤该模式。

  • 产品类⾮常复杂,或者产品类中的调⽤顺序不同产⽣了不
    同的效能,这个时候 使⽤建造者模式⾮常合适。