设计模式(三):建造者模式

  

建造者模式

UML类图:

说明:

  Director指挥者类可以调用所有建造者抽象类Builder1,Builder2,Builder3 ...

  每一个建造者抽象类Builder只生产一类产品,类中分别规定了生产各个构件的方法,及最后创建完整产品的方法。

  每一个建造者抽象类Builder都有对应的实现类ConcreteBuilder,在实现类中,实现Builder中的所有方法。

  Product产品类,主要包含组合产品构件方法、展示完整产品方法,是产品的表示。

 

优点:

  ①因为将一个复杂产品的创建过程和其表示分离,使得同样的创建过程可以创建不同表示。

   用户不必知道复杂产品的内部构成,直接使用某一创建过程(建造者类)创建,之后,因为创建过程和表示是分离的,所以创建结果可以表示为不同的产品,

  ②每一个建造者类独立,方便调用、替换、增改。

  ③面对非常复杂的产品,可以将其创建步骤分解到不同的建造者中,清晰化创建过程,更加精确地控制复杂产品的创建过程。

缺点:

  ①如果产品内部的变化或构成极其复杂,可能会需要定义很多建造者实现类(ConcreteBuilder)来实现这种变化,

   会导致系统变得很庞大,增加了系统的理解难度和运行成本,也不易维护

  ②只适用于同类产品(内部结构相同)的创建,如果产品内部的构成或变化差异很大,则不适用此模式。

适用范围:创建具有复杂的内部结构,且内部属性本身相互依赖的产品。

 

客户端:

  Director director = new Director(); //创建指挥者类

 

  Builder builder1 = new ConcreteBuilder1();  //选中一类具体产品,实例化其建造类ConcreteBuilder1

  director.construct1(builder1); //指挥者调用此建造类

  Product product = builder1.getProduct(); //建造类ConcreteBuilder1来生产完整的此类产品

  product.show(); //产品展示

 

  // 同一个Builder可以创建不同的具体产品

  Builder builder2 = new ConcreteBuilder2();  //选中另一类具体产品,实例化其建造类ConcreteBuilder2

  director.construct1(builder2);

  Product product2 = builder2.getProduct();

  product2.show();

 

  一句话概括:将一个复杂对象的构件和它的表示分离,使得同样的构建过程可以创建不同的表示

 

/**
  * 建造者模式 :将一个复杂对象的构件与它的表示分离,使得同样的构建过程可以创建不同的表示
  * 
  * Builder                                BuilderOther                               (每个Builder只生产一类产品,包含生产各个构件的方法,及获取完整产品的方法)
  * ConcreteBuilder1  ConcreteBuilderImp2  ConcreteBuilderOther1  ConcreteBuilderOther2  (实现Builder的所有方法,会调用Product中的构件组合方法,以便创建产品)
  *
  * Director (选择生产哪种产品,指挥建造过程,即调用Builder中该产品各构件的产生方法)
  *
  * Product  (提供构件组合方法,并负责将实例化的产品展示)
  */
原文地址:https://www.cnblogs.com/shushengyou/p/9804314.html