一、概述:

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

二、结构:

1、Product(复杂的产品对象):一个复杂对象,包含多个成员变量。

public class Product(){private String PartA;private String PartB;private String PartC;//三个成员变量的setter()和getter()省略。
}

2、Builder(建造者):声明两类方法,一类负责创建复杂对象中的各个部件,另一类负责返回复杂对象(即Product)。

public abstract class Builder(){Product product=new Product();//1.各个部件的创建方法声明public abstract void buildPartA();public abstract void buildPartB();public abstract void buildPartC();//2.返回复杂对象public Product getResult(){return product;}
}

3、ConcreteBuilder(具体建造者):继承或实现Builder,覆写Builder中的方法,各个部件的具体实现。

public class ConcreteBuilder extends Build(){public void buildPartA(){product.setPartA("A111");}public void buildPartB(){product.setPartA("B111");}public void buildPartC(){product.setPartA("C111");}
}

4、Director(指挥者):指挥一个复杂对象的构建,包括构建的流程。

public class Director(){//创建方法,以Builder抽象类作为方法参数public Product buildProduct(Builder b){//建造过程:A->B->Cb.buildPartA();b.buildPartB();b.buildPartC();//调用返回复杂对象的方法,将建造后的对象进行返回。Product p=b.getResult();}
}

三、应用实例:

某公司要开发一个视频播放软件,提供多种显示模式,如完整模式,精简模式,记忆模式等。不同模式下,显示有所差别。在完整模式下将显示主窗口,菜单,播放列表,控制条;在精简模式下将显示主窗口和控制条;在记忆模式下将显示主窗口,播放列表,控制条。请用建造者模式设计。

  1. 分析:
    复杂产品对象:视频播放软件(VideoPlayer)
    抽象Builder:显示部件(Display)
    具体Builder:
    (1)完整模式Builder(FullMode)
    (2)精简模式Builder(SimpleMode)
    (3)记忆模式Builder(MemoryMode)
    指挥者Director:(BuilderController)

  2. 实例类图:

  3. 实现(主要代码):

    (1)抽象Builder:

public abstract class Display {protected VideoPlayer videoPlayer=new VideoPlayer();//声明建造方法public abstract void buildMenu();public abstract void buildPlayList();public abstract void buildMainWin();public abstract void buildControlBar();//返回复杂产品对象public VideoPlayer getVideoPlayerBean(){return videoPlayer;}//钩子方法,对复杂对象构建进行精细的控制public boolean isNeedMenu(){return true;}public boolean isNeedPlayList(){return true;}public boolean isNeedMainWin(){return true;}public boolean isNeedControlBar(){return true;}
}

(2)具体一个Builder:

public class SimpleMode extends Display {@Overridepublic void buildMenu() {videoPlayer.setMenu("精简模式菜单显示了");}@Overridepublic void buildPlayList() {videoPlayer.setPlayList("精简模式播放列表显示了");}@Overridepublic void buildMainWin() {videoPlayer.setMainWin("精简模式主窗口显示了");}@Overridepublic void buildControlBar() {videoPlayer.setControlBar("精简模式控制条显示了");}public boolean isNeedMenu(){return false;}public boolean isNeedPlayList(){return false;}
}

(3)指挥者:

public class BuildController {public VideoPlayer buildIt(Display display){if(display.isNeedMainWin()){display.buildMainWin();}if(display.isNeedMenu()){display.buildMenu();}if (display.isNeedPlayList()){display.buildPlayList();}if (display.isNeedControlBar()){display.buildControlBar();}//上述的构建过程执行完毕之后,返回复杂对象VideoPlayer videoPlayerBean = display.getVideoPlayerBean();return videoPlayerBean;}
}

四、总结:

  1. 建造者的核心在于如何一步步构建一个包含多个组成部件的完整对象,使用相同的建造过程构建不同的产品。好比如,如何去构建一个英雄角色,需要给它脸型,服装,武器等等,从头到武器的一个建造过程,却可以建造不同的英雄角色。如天使(精致,天使尾翼,星月杖),恶魔(丑陋,蝙蝠尾翼,三叉戟)。
  2. 优点:

(1)客户端不必直到产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
(2)每一个具体建造者都相对独立,而与其他的建造者无关,因此可以很方便地替换或增加具体建造者。由于指挥者类对抽象建造者变成,增加新的具体建造者无需修改原有代码,系统扩展方便,符合开闭原则。
(3)可以更加精细地控制产品的创建过程。

  1. 缺点:

(1)建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间差异很大,例如组成部分都不相同,不适合使用建造者模式。
(2)产品的内部变化复杂,可能会导致需要定义很多的具体建造者类来实现这种变化,导致系统变得庞大。

  1. 适用环境:

(1)需要生成的产品对象有复杂的内部结构,通常对象会包含多个成员变量。
(2)需要生成的产品对象的属性相互依赖,需要指定其生成顺序。
(3)对象的创建过程独立于创建该对象的类。
(4)隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

  1. 与抽象工厂模式对比:

建造者返回一个完整的复杂产品,抽象工厂返回一系列相关的产品。在抽象工厂模式中,客户端通过选择具体工厂来生成所需对象,而在建造者模式中,客户端通过指定具体建造者的类型来指导Director类如何去生成一个对象,侧重于一步步构造一个复杂对象。如果将抽象工厂模式看成一个汽车配件生产厂,生产不同类型的汽车配件,那么建造者模式就是一个汽车组装厂,通过对配件进行组装返回一辆完整的汽车。

Java设计模式之建造者(Builder)模式详细总结相关推荐

  1. Java设计模式之建造者Builder模式代码示例

  2. java中的build类_30 Java设计模式系列-建造者(Build)模式

    建造者(Build)模式 建造者(Build)模式是非常常见的设计模式之一,写个笔记,记录一下我的学习过程和心得. 首先了解一些Build模式的定义. 将一个复杂对象的构建与它的表示分离,使得同样的构 ...

  3. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  4. Java设计模式(建造者模式-适配器模式-桥接模式)

    Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

  5. java设计模式4--建造者模式(Builder)

    本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,转载请注明源地址. 建造者模式 将一个复杂对象的构建与它的表示分离 ...

  6. 设计模式学习笔记——建造者(Builder)模式

    设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...

  7. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  8. java设计模式之建造者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  9. JAVA设计模式之建造者模式

    转自 JAVA设计模式之建造者模式 建造者模式(Builder)的定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂对象的创建型 ...

  10. 一文弄懂Java设计模式之建造者模式:图解+游戏角色生成实例

    文章目录 详解Java设计模式之建造者模式 案例引入建造者模式 建造者模式 定义 UML类图表示 模式结构 案例分析与代码实现 案例类图实现 代码结构 代码实现 结果分析 指挥者类的深入讨论 钩子方法 ...

最新文章

  1. 《Advanced PHP Programming》读书笔记
  2. YESLAB的数据中心课程介绍
  3. api 定位 微信小程序 精度_微信小程序城市定位(借助百度地图API判断城市)
  4. nginx服务器绑定域名和设置根目录的方法
  5. Java防止Xss注入json_浅谈 React 中的 XSS 攻击
  6. PointDSC: Robust Point Cloud Registration using Deep Spatial Consistency (PointDSC) 论文学习笔记小结
  7. 深入理解JVM逃逸分析
  8. flask部署pytorch模型
  9. 【最短路径】之Dijkstra算法
  10. [HTML]POST方法和GET方法
  11. 刘庆付统考计算机基础选择题答案
  12. C语言学习杂记1|学习软件选择
  13. 现代信号处理 张贤达_信号处理领域著名科学家、清华大学张贤达教授逝世,享年 74岁...
  14. 如何执行冲刺sprint
  15. C# graphics方法
  16. 友点CMS采集自动采集伪原创发布
  17. 字节LastDay,告别十个月的实习生活,流水账与一些思考
  18. 第一次发C语言文章居然在头条获得35的展现
  19. 【第59题】输入、输出系列7-压缩文件相关技术2
  20. 合泰单片机 | HT66F3195 | 个人库开发过程 | 【1】前言

热门文章

  1. 诺基亚总裁:智能手机仍将以Symbian为主
  2. 基于遗传算法的车间调度问题解决方案学习笔记(Matlab、IE、精益生产)
  3. c语言作业闰年,c语言作业
  4. c语言1的补码,C语言-数据类型(原码、反码、补码)-1
  5. seo优化之外链建设
  6. 前端—HTML中常见标签的使用
  7. 【Objective-C语言的SEL对象】
  8. 案例研究:设计与方法_案例研究:未来主义与新时代数字艺术作品
  9. Vision Transformer详解
  10. 微软正式发布SQL Server 2012 RTM版本