设计模式之生成器模式(对象创建型模式)

1.定义/概念

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

2.生成模式角色

Builder:                 生成器接口,定义创建一个Product对象所需要的各个部件的操作。
ConcreteBuilder:    具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。
Director:               指导者,也被称导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
Product:                产品,表示被生成器构建的复杂对象,包含多个部件。

3.应用场景:一水杯工厂要生产各式各样的水杯,无论杯子是神马造型,但都包括绳子,帽子和杯体。以此模型创建各种类型的杯子。

Builder.java

package com.glut.demo6;/*** Builder类* 生成器接口,定义创建一个Product对象所需要的各个部件的操作。* @author qichunlin**/
public abstract class Builder {//创建一个杯子   原来这里是设为protected类型的Cup cup = new Cup();//建立杯子模型public abstract void buildString();//创建一个绳子部件public abstract void buildCap();//创建一个帽子部件public abstract void buildCupBody();//创建一个杯体部件//返回一个杯子对象public Cup getResult() {return cup;}
}

ClassCup.java

package com.glut.demo6;/*** * 具体建造者 ConcreteBuilder* @author qichunlin**/
public class ClassCup extends Builder{@Overridepublic void buildString() {cup.setString("生产绳子");System.out.println("生产绳子....");}@Overridepublic void buildCap() {cup.setCap("生产帽子");System.out.println("生产帽子....");}@Overridepublic void buildCupBody() {cup.setCupbody("生产杯体");System.out.println("生产杯体....");}}

Cup.java

package com.glut.demo6;/*** 杯子类* * @author qichunlin**/
public class Cup {private String string;//绳子private String cap;//帽子private String cupbody;//杯体public String getString() {return string;}public void setString(String string) {this.string = string;}public String getCap() {return cap;}public void setCap(String cap) {this.cap = cap;}public String getCupbody() {return cupbody;}public void setCupbody(String cupbody) {this.cupbody = cupbody;}//显示public void show() {System.out.println("杯子生产完毕!");}}

Director.java

package com.glut.demo6;/*** 导演类* * @author qichunlin**/
public class Director {private Builder builder;public Director(Builder builder) {this.builder = builder;}//获取产品public void create() {builder.buildString();builder.buildCap();builder.buildCupBody();builder.getResult().show();}}

Test.java

package com.glut.demo6;/*** 生成器模式* * 定义:将一个复杂对象的创建和它的表示分离,使得同样的创建过程可以有不同的表示。* @author qichunlin**/
public class Test {public static void main(String[] args) {//创建具体建造者ClassCup cc = new ClassCup();//创建指挥者Director d = new Director(cc);d.create();}
}

4.生成器模式与工厂模式的不同

生成器模式构建对象的时候,对象通常构建的过程中需要多个步骤,就像我们例子中的先有主机,再有显示屏,再有鼠标等等,生成器模式的作用就是将这些复杂的构建过程封装起来。
工厂模式构建对象的时候通常就只有一个步骤,调用一个工厂方法就可以生成一个对象。

5.生成器模式的优缺点

优点

将一个对象分解为各个组件
将对象组件的构造封装起来
可以控制整个对象的生成过程

缺点

对不同类型的对象需要实现不同的具体构造器的类,这可能回答大大增加类的数量

6.生成器模式的功能

生成器模式的主要功能是构建复杂的产品,而且是细化的,分步骤的构建产品,也就是生成器模式重在一步一步解决构造复杂对象的问题。如果仅仅这么认知生成器模式的功能是不够的。
更为重要的是,这个构建的过程是统一的、固定不变的,变化的部分放到生成器部分了,只要配置不同的生成器,那么同样的构建过程,就能构建出不同的产品来。

转载于:https://www.cnblogs.com/qichunlin/p/8680072.html

2018.3.31 设计模式之生成器模式详解及例子(对象创建型模式)相关推荐

  1. Builder(生成器)--对象创建型模式

    Builder(生成器)–对象创建型模式 一.意图 将一个复杂的对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 二.动机 1.在软件系统中,有时候面临着"一个复杂对象&quo ...

  2. 设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns)...

    设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns) 目录 · 概述 · Factory · What is the Fact ...

  3. 设计模式之原型法(ProtoType)----对象创建型模式

    设计模式之原型法(ProtoType)----对象创建型模式 1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用性 1)当要实例化的类是在运行时刻指定时,例如,通过动 ...

  4. Factory Method(工厂方法)--对象创建型模式

    Factory Method(工厂方法)–对象创建型模式 一.意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 二.动机 1.在软 ...

  5. Solr系列二:solr-部署详解(solr两种部署模式介绍、独立服务器模式详解、SolrCloud分布式集群模式详解)...

    一.solr两种部署模式介绍 Standalone Server 独立服务器模式:适用于数据规模不大的场景 SolrCloud  分布式集群模式:适用于数据规模大,高可靠.高可用.高并发的场景 二.独 ...

  6. 设计模式01 UML图,软件设计原则,创建型模式

    概述 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1995年,由 Erich Gamma.Richard Helm.Ralph Johnson 和 Joh ...

  7. 《设计模式:可复用面向对象软件的基础》——创建型模式(2)(笔记)

    文章目录 三.创建型模式 3.4 PROTOTYPE(原型) 1.意图 补充部分 2.动机 3.适用性 4.结构 5.参与者 6.协作 7.效果 8 实现 9.代码示例 10.相关模式 3.5 SIN ...

  8. 大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:2.工厂模式之无工厂时代

    在上一节中我们了解到了工厂模式中设计到了设计模式,在接下里的章节,我们会根据提出的问题一步步的优化我们的代码,最终把工厂模式学精学透. 一.工厂模式之无工厂时代 我有一个愿望就是让我的女朋友能够坐在宝 ...

  9. 大话设计模式之爱你一万年:第四章 创建型模式:建造者模式:爱不仅要说还要做:2.建造者模式之组装电脑

    为了能够让我的女朋友能够在家就可以追剧(主要是我可以抱着她(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤),我开始了我的电脑组装之旅- 一.自己动手丰衣足食 – 没有建造者模式 1.1 类图 我根据对电脑的理解, ...

最新文章

  1. JRE System Library、Referenced Libraries、Web App Libraries的含义
  2. 牛客小白9 换个角度思考(离线+树状数组)
  3. 薛老师软考高项学员:2016年4月6日作业
  4. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
  5. 怎么创建自己的oracle,oracle 创建自己的wm_concat
  6. python如何加载图片_python如何导入图片
  7. 思科:云技术正日趋普及 然而云战略并不成熟
  8. (一)如何实现一个单进程阻塞的网络服务器
  9. Reinforcement Learning by David Silver 学记记录
  10. HighCharts:设置饼图不可点击选择
  11. APICS与AX的Master Planning(一)--Phantom bill of Material 虚项
  12. springer论文模板参考文献的顺序问题
  13. html5 video的简单使用
  14. PCL--学习笔记(持续更新——蜗速)
  15. Android动画总结系列(2)——补间动画使用
  16. Java现在好找工作吗?
  17. 用html做相册需要什么,如何快速有效的生成HTML相册?
  18. 分享如何跟进转化客户,提高成单率
  19. 简单之美——系统设计黄金法则
  20. 用python对excel进行打印操作

热门文章

  1. python打开一个文件夹下所有txt文件-python读取一个目录下所有txt里面的内容方法...
  2. 济南python工资一般多少钱-济南python开发培训机构哪个好
  3. python代码大全o-python文件编码及执行
  4. 一个python程序员需要掌握的知识-python初学者搭建网站需要了解的基础知识
  5. python语言入门教程-Python语言十分钟快速入门
  6. python web为什么不火-python web为什么不火
  7. python中文叫什么意思-在python中,“~”是什么意思?
  8. python有相关的证书可以考吗-python后端开发工程师考证试题
  9. windows如何安装python-手把手教你如何在windows系统安装python?
  10. python里面的之前打过的记忆信息-python 中 __init__方法