建造型——建造者模式
来源:互联网 发布:北京上游网络 编辑:程序博客网 时间:2024/04/30 13:12
抽象工厂的缺点:
功能太简单,只能创建简单的对象。
定义:
将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,使用简单的对象一步一步构建一个复杂
的对象。
目的:
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
特点:
①一个复杂的对象的创建,通常由各个部分的子对象用一定的算法构成;
②由于需求的变化,这个复杂的各个部分经常面临这剧烈的变化,但是他们组合在一起的算法却相对稳定。
③构建时将变与不变分离开。
通用类图:
产品类:
一般是一个较为复杂的对象。可以是一个具体类,也可以是有一个抽象类和与他不同实现组成。
抽象建造者:
为创建一个产品对象的各个部件指定抽象接口。一般有两类抽象方法,一个用来返回建造产品,一个用来返回产品。
建造者:
实现建造各个部件的具体过程,并将返回组建好的产品。
导演类:
负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类,一般来说
导演类被用来封装程序中易变的部分。
客户端:
只需关系具体的建造者,无需关系产品内部构建流程,如果需要其他复杂的产品对象,只需选择其他的建造者,如果需要扩展
,则只需写一个新的Builder就行了。
角色Product:
- public class Person {
- //产品部件
- private String head;
- private String body;
- private String foot;
- public String getHead() {
- return head;
- }
- public void setHead(String head) {
- this.head = head;
- }
- public String getBody() {
- return body;
- }
- public void setBody(String body) {
- this.body = body;
- }
- public String getFoot() {
- return foot;
- }
- public void setFoot(String foot) {
- this.foot = foot;
- }
- }
- public class Man extends Person {
- public Man(){
- System.out.println(“开始建造男人");
- }
- }
- public class Woman extends Person {
- public Woman(){
- System.out.println(“开始建造女人");
- }
- }
角色Builder:
建造者AConcreteBuilder:
建造者BConcreteBuilder:导演类Director:
客户端:
建造者模式在使用过程中可以演化出多种形式:
如果具体的被建造对象只有一个的话,可以省略抽象的Builder和Director,让ConcreteBuilder自己扮演指导者和建造者双重角色,甚至ConcreteBuilder也可以放到Product里面实现。
在《Effective Java》书中第二条,就提到“遇到多个构造器参数时要考虑用构建器”,其实这里的构建器就属于建造者模式,只是里面把四个角色都放到具体产品里面了。
上面例子如果只制造男人,演化后如下:
测试:
建造者模式是的优点:
①使用建造者模式可以是客户端不必知道产品内部组成的细节
②具体的建造者类之间是相互独立的,对于系统的扩展非常有利。
③由于具体的建造者是独立的,因此可以建造过程逐步细化,而不对其他模块产生任何影响。
阅读全文
0 0
- 建造型——建造者模式
- 创建型模式—建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 软件设计模式 —— 建造者模式
- 设计模式——建造者模式
- 建造者模式——设计模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- 设计模式——建造者模式
- POJ 1020--Packets
- Linux-C编程-Day-1
- python的编译和解释过程
- 字体
- Eclipese下Maven+Jersey+Tomcat入门案例
- 建造型——建造者模式
- eclipse/JBoss(IDE)安装 lombok插件
- 注册
- 备忘录模式案例
- Kali2 SSH连接不上的解决方法
- 主体
- Java初级入门之 Five 面向对象特征
- 《机器学习实战》学习笔记-[2]-K近邻_网站约会实例
- python之字符串