建造者模式(生成器模式)定义:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式中的4个角色:

Product产品类

  通常是实现了模板方法模式,也就是有模板方法和基本方法。

Builder抽象建造者

  规范产品的组建,一般是由子类实现。

ConcreteBuilder具体建造者

  实现抽象类定义的所有方法,并且返回一个组建好的对象。

Director导演类

负责安排已有模块的顺序,然后告诉Builder开始建造。

下面这个例子就是需要根据不同的方法的调用前后进行对象实例的创建。

产品类:

父类(使用了模板方法模式):

package pattern.Builder;import java.util.ArrayList;public abstract class CarModel {private ArrayList<String> sequence = new ArrayList<>();// 基本方法protected abstract void start();// 基本方法protected abstract void stop();// 基本方法protected abstract void alarm();// 基本方法protected abstract void engineBoom();// 模板方法final public void run() {for (int i = 0; i < this.sequence.size(); i++) {String actionName = this.sequence.get(i);if (actionName.equalsIgnoreCase("start")) {this.start();} else if (actionName.equalsIgnoreCase("stop")) {this.stop();} else if (actionName.equalsIgnoreCase("alarm")) {this.alarm();} else if (actionName.equalsIgnoreCase("engin boom")) {this.engineBoom();}}}final public void setSquuence(ArrayList<String> sequence) {this.sequence = sequence;}}

子类1:

package pattern.Builder;public class BenzModel extends CarModel{@Overrideprotected void start() {System.out.println("Benz start");}@Overrideprotected void stop() {System.out.println("Benz stop");}@Overrideprotected void alarm() {System.out.println("Benz alarm");}@Overrideprotected void engineBoom() {System.out.println("Benz engineBoom");}}

子类2:

package pattern.Builder;public class BMWModel extends CarModel{@Overrideprotected void start() {System.out.println("BMW start");}@Overrideprotected void stop() {System.out.println("BMW stop");}@Overrideprotected void alarm() {System.out.println("BMW alarm");}@Overrideprotected void engineBoom() {System.out.println("BMW engineBoom");}}

 Builder抽象建造者类

package pattern.Builder;import java.util.ArrayList;public abstract class CarBuilder {public abstract void setSequence(ArrayList<String> sequence);public abstract CarModel getCarModel();
}

ConcreteBuilder具体建造者类

建造者1:

package pattern.Builder;import java.util.ArrayList;public class BenzBuilder extends CarBuilder{private BenzModel benz = new BenzModel();@Overridepublic void setSequence(ArrayList<String> sequence) {this.benz.setSquuence(sequence);}@Overridepublic CarModel getCarModel() {return this.benz;}}

建造者2:

package pattern.Builder;import java.util.ArrayList;public class BMWBuilder extends CarBuilder{private BMWModel BMW = new BMWModel();@Overridepublic void setSequence(ArrayList<String> sequence) {this.BMW.setSquuence(sequence);}@Overridepublic CarModel getCarModel() {return this.BMW;}}

Director导演类:

package pattern.Builder;import java.util.ArrayList;public class Director {private ArrayList<String> sequence = new ArrayList<>();private BenzBuilder benzBuilder = new BenzBuilder();private BMWBuilder bmwBuilder = new BMWBuilder();public BenzModel getABenzModel() {this.sequence.clear();this.sequence.add("start");this.sequence.add("stop");this.benzBuilder.setSequence(sequence);return (BenzModel) this.benzBuilder.getCarModel();}public BenzModel getBBenzModel() {this.sequence.clear();this.sequence.add("engine boom");this.sequence.add("start");this.sequence.add("stop");this.benzBuilder.setSequence(sequence);return (BenzModel) this.benzBuilder.getCarModel();}public BMWModel getABMWModel() {this.sequence.clear();this.sequence.add("start");this.sequence.add("stop");this.benzBuilder.setSequence(sequence);return (BMWModel) this.bmwBuilder.getCarModel();}public BMWModel getBBMWModel() {this.sequence.clear();this.sequence.add("engine boom");this.sequence.add("start");this.sequence.add("stop");this.benzBuilder.setSequence(sequence);return (BMWModel) this.bmwBuilder.getCarModel();}}

通过导演类,为每个方法调用的顺序都创建一个独立的方法,再调用建造者类对方法进行实例化

导演类可以有多个,建造者类也可有多个。

建造者模式的优点:

1、封装性:使用建造者模式可以使客户端不必知道产品内部组成的细节,

2、建造者独立,容易扩展:每个不同类型的建造者都相互独立,对系统的扩展非常有利。

3、便于控制细节风险:由于具体的建造者是独立的,因此可以对建造者过程逐步细化,而不对其他的模块产生任何影响。

转载于:https://www.cnblogs.com/maple92/p/6671030.html

设计模式-------建造者模式(生成器模式)相关推荐

  1. 【设计模式】单例模式-生成器模式-原型模式

    前面的几种工厂模式,主要用于选择实现,这里的三种模式:单例模式.生成器模式.原型模式,主要用于生成对象,在GoF的划分中,这是创建型的五种模式(不包括简单工厂,前面提到过,这不是一个标准意义上的设计模 ...

  2. 设计模式之建造者模式(生成器模式、Builder)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  3. 设计模式(4)建造者模式/生成器模式(Builder)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...

  4. 建造者模式 生成器模式 创建型 设计模式(五)

    建造者模式 Builder 也叫做生成器模式 在正式开始建造者模式之前,先回顾下抽象工厂模式 本人的所有系列文章都是自己学习的记录过程,均有比较严格的先后顺序,如果不清楚抽象工厂模式可以先往前翻翻 从 ...

  5. 设计模式之十生成器模式

    概念 生成器模式的核心是当构建生成一个对象的时候,这个对象一般比较复杂.需要包含多个步骤,虽然每个步骤具体的实现不同,但是都遵循一定的流程与规则 .建造模式是将复杂的内部创建封装在内部,对于外部调用的 ...

  6. 创造型模式-生成器模式

    生成器模式:能够从简单的对象一步一步生成复杂的对象,生成器模式是一种用来逐步构建复杂对象并在最后一步返回对象的创造型模式.构造一个对象的过程是通过泛型实现的,以便它能够用于对同一个对象创建不同的表示形 ...

  7. 《研磨设计模式》chap8 生成器模式Builder

    场景:现有一"导出数据"的需求,分别导出到文本和xml. 1. 正常编码 /*** 导出数据到文本文件的对象*/ public class ExportToTxt {/*** 导出 ...

  8. 设计模式(三):生成器模式

    这是设计模式系列文章的第三篇 之前两篇的阅读效果不是很好,我一度怀疑这种题材的文章不受大家欢迎,直到前两天我面试了一个小姐姐... 面试过程中和小姐姐聊起她在上家公司做过的项目,其中有一个功能,根据小 ...

  9. 设计模式(Java随笔)—生成器模式

    生成器模式(Builder Pattern):分离构建算法和具体的构造实现,从而使构建算法可以重用 Separate the construction of a complex object from ...

  10. JAVA23种设计模式之生成器模式

    生成器模式 生成器模式是一种对象的创建模式,可以将一个复杂产品的内部表象和产品的生产过程分隔开来,(构建与表示分离).使得同样的构建过程可以创建不同的表示. 简单的来说,就是讲一个复杂的对象拆分成一个 ...

最新文章

  1. 如何在同一台电脑开启多个tomcat服务器
  2. (十)MySQL日志
  3. SpringBoot简单集成Redis,实现简单查询
  4. Git/Github--push自己的第一段代码
  5. cannon的英文名_Cannon[坎农]的中文翻译及英文名意思
  6. 系统已有MYSQL环境,如何安装宝塔面板
  7. python能做什么软件-python可以编写什么软件
  8. 微服务实战(六):选择微服务部署策略 - DockOne.io
  9. (转)机会还是陷阱:诺亚财富的私募股权策略
  10. 在php里怎么安装composer,怎么安装composer
  11. 用计算机打出的乐谱,怎样在计算机内输入乐谱,并打印
  12. 红米 android8 刷机,【红米6 安卓8.1线刷包】MIUI V9.6.7.0.OCGCNFD稳定版 线刷精简包...
  13. Java 安装+环境配置(图文详解)
  14. 利用echart和echart-gl绘制江苏省的地图之二
  15. Windows DiskPart
  16. 数列极限的概念及性质
  17. 朱松纯:走向通用人工智能——从大数据到大任务
  18. OriginPro2021安装注意事项(详细)
  19. Android facebook KeyHash生成(生成发布密钥散列)
  20. if语句判断真假的几种情况

热门文章

  1. python功能二维表合并,一维表内嵌元祖合并以及取交集,并集,差集
  2. 课文电子计算机与多媒体减写,课文电子计算机与多媒体关系介绍
  3. php c 交互,C语言和go语言之间的交互操作方法
  4. stm32usb转串口驱动_新品推荐:乐扩PCI-E转8口RS-232串口卡 支持短铁片
  5. 计算机原理与编程设计,最优化计算机原理与算法程序设计
  6. php xml 留言板,php xml留言板 xml存储数据的简单例子
  7. r语言中的while循环_R编程中的While循环
  8. 使用Kotlin的Android菜单
  9. Android TabLayout和ViewPager
  10. 什么情况下你的工作最为成功_在不倦怠的情况下开始成功学习