2018.3.31 设计模式之生成器模式详解及例子(对象创建型模式)
设计模式之生成器模式(对象创建型模式)
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 设计模式之生成器模式详解及例子(对象创建型模式)相关推荐
- Builder(生成器)--对象创建型模式
Builder(生成器)–对象创建型模式 一.意图 将一个复杂的对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 二.动机 1.在软件系统中,有时候面临着"一个复杂对象&quo ...
- 设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns)...
设计模式教程(Design Patterns Tutorial)笔记之一 创建型模式(Creational Patterns) 目录 · 概述 · Factory · What is the Fact ...
- 设计模式之原型法(ProtoType)----对象创建型模式
设计模式之原型法(ProtoType)----对象创建型模式 1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用性 1)当要实例化的类是在运行时刻指定时,例如,通过动 ...
- Factory Method(工厂方法)--对象创建型模式
Factory Method(工厂方法)–对象创建型模式 一.意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 二.动机 1.在软 ...
- Solr系列二:solr-部署详解(solr两种部署模式介绍、独立服务器模式详解、SolrCloud分布式集群模式详解)...
一.solr两种部署模式介绍 Standalone Server 独立服务器模式:适用于数据规模不大的场景 SolrCloud 分布式集群模式:适用于数据规模大,高可靠.高可用.高并发的场景 二.独 ...
- 设计模式01 UML图,软件设计原则,创建型模式
概述 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1995年,由 Erich Gamma.Richard Helm.Ralph Johnson 和 Joh ...
- 《设计模式:可复用面向对象软件的基础》——创建型模式(2)(笔记)
文章目录 三.创建型模式 3.4 PROTOTYPE(原型) 1.意图 补充部分 2.动机 3.适用性 4.结构 5.参与者 6.协作 7.效果 8 实现 9.代码示例 10.相关模式 3.5 SIN ...
- 大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:2.工厂模式之无工厂时代
在上一节中我们了解到了工厂模式中设计到了设计模式,在接下里的章节,我们会根据提出的问题一步步的优化我们的代码,最终把工厂模式学精学透. 一.工厂模式之无工厂时代 我有一个愿望就是让我的女朋友能够坐在宝 ...
- 大话设计模式之爱你一万年:第四章 创建型模式:建造者模式:爱不仅要说还要做:2.建造者模式之组装电脑
为了能够让我的女朋友能够在家就可以追剧(主要是我可以抱着她(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤),我开始了我的电脑组装之旅- 一.自己动手丰衣足食 – 没有建造者模式 1.1 类图 我根据对电脑的理解, ...
最新文章
- JRE System Library、Referenced Libraries、Web App Libraries的含义
- 牛客小白9 换个角度思考(离线+树状数组)
- 薛老师软考高项学员:2016年4月6日作业
- c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
- 怎么创建自己的oracle,oracle 创建自己的wm_concat
- python如何加载图片_python如何导入图片
- 思科:云技术正日趋普及 然而云战略并不成熟
- (一)如何实现一个单进程阻塞的网络服务器
- Reinforcement Learning by David Silver 学记记录
- HighCharts:设置饼图不可点击选择
- APICS与AX的Master Planning(一)--Phantom bill of Material 虚项
- springer论文模板参考文献的顺序问题
- html5 video的简单使用
- PCL--学习笔记(持续更新——蜗速)
- Android动画总结系列(2)——补间动画使用
- Java现在好找工作吗?
- 用html做相册需要什么,如何快速有效的生成HTML相册?
- 分享如何跟进转化客户,提高成单率
- 简单之美——系统设计黄金法则
- 用python对excel进行打印操作
热门文章
- python打开一个文件夹下所有txt文件-python读取一个目录下所有txt里面的内容方法...
- 济南python工资一般多少钱-济南python开发培训机构哪个好
- python代码大全o-python文件编码及执行
- 一个python程序员需要掌握的知识-python初学者搭建网站需要了解的基础知识
- python语言入门教程-Python语言十分钟快速入门
- python web为什么不火-python web为什么不火
- python中文叫什么意思-在python中,“~”是什么意思?
- python有相关的证书可以考吗-python后端开发工程师考证试题
- windows如何安装python-手把手教你如何在windows系统安装python?
- python里面的之前打过的记忆信息-python 中 __init__方法