zoukankan      html  css  js  c++  java
  • 大战设计模式【17】—— 建造者模式

    建造者模式(Builder)

    设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

    一、定义

    将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示。

    二、结构

    Builder(抽象建造者):为创建一个产品对象的各个部件指定抽象接口,在其接口中一般包含两类方法:一类是BuildPartX(),用于创建复杂对象的各个部件;

    另一类是GetResult(),用于返回生成好的复杂对象。它就可以是抽象类,也可以是接口。

    ConcreteBuilder(具体建造者):实现了Builder接口,即实现了各个部件的具体构造和装配方法,定义并明确其所创建的复杂对象。

    Product(产品角色):被构建的复杂对象,包含多个组成部件。

    Director(指挥者):负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其Construct()方法中调用建造者对象的部件构造和装配方法,完成复杂对象的建造。

    因此,客户端只需要和指挥者进行交互,这也确保了单一职责。

    三、优点

    客户端不需要知道产品内部的组成细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。

    具体建造者相对独立,增加新的具体建造者无需修改原有类库的代码,系统扩展比较方便,符合开闭原则。

    可以更加精细地控制产品的创建过程,将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。

    四、缺点

    对于所创建的产品有一定限制:一般这些产品都具有一些较多的共同点,其组成部分相似。如果差异性很大,那么则不适合使用建造者模式。

    如果产品的内部结构复杂多变,可能会需要定义很多具体构建者来实现这些变化,会导致系统变得庞大,增加系统的理解难度和运行成本。

    五、应用场景

    需要生成的产品对象由复杂的内部结构,这些产品对象通常包含多个成员变量。

    需要生成的产品对象的属性相互依赖,需要指定其生成顺序。

    隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

    六、个人总结

    1、建造者模式是用来生产对象的,告诉指挥者你需要什么样的对象,他就给你建造什么样的对象。

    2、建造者的任务是组装一个个零件,最终建造出一个你所需要的对象。就如例子中,我们需要建造一个大人和一个小孩对象

    我们只要告诉指挥者我们需要什么样的对象就可以了,他就会帮我们建造好一个完整的对象。

    3、建造者模式一个重点是向客户隐藏了产品的内部表现。

    4、建造者模式与抽象工厂模式有点相似,但是建造者模式返回一个完整的复杂产品,而抽象工厂模式则返回一系列相关的产品。

    如果将抽象工厂模式看成一个汽车配件生产厂,生成不同类型的汽车配件;

    那么建造者模式则是一个汽车组装厂,通过对配件进行组成返回一辆完整的汽车。

    参考博客:http://www.cnblogs.com/edisonchou/p/6828436.html
  • 相关阅读:
    Oracle VM VirtualBox 虚拟机中桥接模式一直不能用 ,需要安装 VBoxNetLwf.inf
    Windows7窗口跑到屏幕外面
    手动操作群晖蜂鸣器指示灯方法
    DHT11温湿度传感器接入HomeBridge
    DIY树莓派Homebridge智能台灯
    群晖NAS局域网无法跑满千兆排查
    虚拟机性能监控与故障处理工具------JDK的命令行工具
    垃圾收集器与内存分配策略-内存分配与回收策略
    Minor GC 与Full GC有什么不一样
    java的关键字与保留字
  • 原文地址:https://www.cnblogs.com/linkstar/p/7784554.html
Copyright © 2011-2022 走看看