《大话设计模式》java实现之建造者模式
来源:互联网 发布:淘宝漏洞收货可以退款 编辑:程序博客网 时间:2024/06/06 03:09
建造者模式与外观模式都是统一了接口,方便访问,个人认为它们之间的不同主要是建造者模式更关系该接口内部实现逻辑(比如实现顺序等),而外观模式对该统一的接口内部实现不太关注,如果把建造者模式的Director和抽象类(PersonBuilder)合二为一,就成了外观模式。这一点也可以与上一篇文章做对比,在外观模式中,列举了股票(stock)、国债(nationalDebt)和房地产(realty)三中,共五个类,在建造者模式中,只列举了两种,也是5个类,说明建造者模式只是把外观模式其中的一个类一分为二而已。
因此,当需要统一的接口内的实现比较多变时,可以使用建造者模式,业务变化时扩展Director类即可
重写书中代码时,为了方便,只写了buidHead方法和buildBody方法,并且不使用书中的画图(如Graphics、Color等),只是单纯的打印
UML
代码结构
public class Client { public static void main(String[] args) { PersonBuilder ptb = new PersonThinBuilder(); PersonDirector pdThin = new PersonDirector(ptb); pdThin.createPerson(); System.out.println("------------------------------"); PersonBuilder pfb = new PersonFatBuilder(); PersonDirector pdFat = new PersonDirector(pfb); pdFat.createPerson(); }}
public abstract class PersonBuilder { abstract void buildHead(); abstract void buildBody();}
public class PersonDirector { private PersonBuilder pb; public PersonDirector(PersonBuilder pb) { super(); this.pb = pb; } public void createPerson() { //封装了建造过程,过程变化时扩展Director类即可 pb.buildHead(); pb.buildBody(); }}
public class PersonFatBuilder extends PersonBuilder { @Override void buildHead() { System.out.println("fat person head"); } @Override void buildBody() { System.out.println("fat person body"); }}
public class PersonThinBuilder extends PersonBuilder { @Override void buildHead() { System.out.println("thin person head"); } @Override void buildBody() { System.out.println("thin person body"); }}
运行结果
阅读全文
0 0
- 《大话设计模式》java实现之建造者模式
- 大话设计模式读后感之建造者模式(JAVA)
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式--建造者模式 Builder -- C++实现实例
- 大话设计模式c++实现---建造者模式
- <九>读<<大话设计模式>>之建造者模式
- 大话设计模式读书笔记之建造者模式
- 大话设计模式java版--建造者模式
- 大话设计模式_建造者模式
- 大话设计模式--建造者模式
- 《大话设计模式》 -- 12.建造者模式
- 大话设计模式-建造者模式
- 大话设计模式—建造者模式
- Exams
- scrapy(三)
- HDU 1232 畅通工程 (并查集)
- 鸡兔同笼
- HDU1983bfs+dfs
- 《大话设计模式》java实现之建造者模式
- Android 经典笔记之八:网络请求数据基础介绍
- TensorFlow在MNIST中的应用-Softmax回归分类
- 常用图像数据集:标注、检索
- 大明山徙步20171111
- Kubernetes 1.7.5部署以及kubernates-dashboard 1.7安装
- linux系统编程
- Android中对服务器发送http请求
- 开源许可证的一些介绍