建造者模式

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(); //产品展示

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

 

 

版权声明:本文为shushengyou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shushengyou/p/9804314.html