移动架构--3.建造者模式

已造房子为例,建造者模式包括产品Product(房子)、设计者Designer、包工头WorkBuilder。
1.传统的建造者模式

//1.产品类代表一个房子
public class Product(){
  private String window;
  private String door;
  public setWindow(String window){
  this.window = window;
  }
  public setDoor(String door){
  this.door = door;
  }
}
//2.抽象的建造类
public interface Builder{
  void createWindow();
  void createDoor();
  Product generateProduct();
}
//3.具体的建造者包工头
public class WorkBuilder implements Builder{
  private Product product = new Product();
  @Override
  public void createWindow(){
    product.setWindow("方形窗户");
  }
  @Override
  public void createDoor(){
    product.setDoor("拱形门");
  }
  @Override
  public Product generateProduct(){
    return product;
  }
}
//4.设计者设计房子
//设计者设计房子的窗户和门
//实现门和窗户是交给建造者
public class Designer{
  public void design(Builder builder){
    builder.createWindow();
    builder.createDoor();
  }
}
//5.客户端调用
public class Client{
  public static void main(String[] args){
    //1.创建建造者
    Builder worker = new WorkBuilder();
    //2.创建设计者
    Desinger designer = new Desinger();
    //3.设计者设计产品
    designer.design(worker);
    //4.建造者生产产品
    worker.generateProduct();
  }
}

传统的建造者模式,设计者持有建造者的引用,建造者持有产品的引用。
2.变种的建造者模式
删除了设计者和抽象的建造者类,利用产品和建造者实现。

//1.建造者
public class ProductBuilder{
  //内部类用于保存需要建造的产品参数
  class ProductParams{
    public string window;
    public string door;
  }
  //参数实例
  private ProductParams params ;
  //建造者构造方法,new一个params对象
  public ProductBuilder(){
    this.params = new ProductParams();
  }
  //建造者需要调用的方法对params进行初始化
  public ProductBuilder madeWindow(String window){
    params.window = window;
    return this;
  }
  public ProductBuilder madeDoor(String door){
    params.door = door;
    return this;
  }
  public Product builder(){
    Product product = new Product();
    product.apply(params);
    return product;
  }
}

//2.产品类
public class Product{
  private String window;
  private String door;
  public void apply(ProductParams params){
    this.window = params.window;
    this.door = params.door;
  }
}

//3.客户端调用
public class Client{
  public static void main(String[] args){
    //1.创建建造者 链式调用
    Builder worker = (new WorkBuilder()).madeWindow("方形窗户").madeDoor("拱形门");
    //2.生产产品
    Product product = worker.builder()
  }
}

变种的建造者模式优点:
1.对于Product没有进行set方法,不对外部暴露改变属性的方法。
2.通过内部类保存产品的属性值,外界通过链式调用。
建造者模式,都是由建造者本身来产生具体的产品。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。