大话设计模式之建造者模式
来源:互联网 发布:手机淘宝网店怎么铺货 编辑:程序博客网 时间:2024/05/17 07:01
参考—->程杰大神的《大话设计模式》—org
记一下一遍以后重复看时有新的理解,メモ
建造者模式—>将一个复杂对象的构建和它的显示分离,使得同样的构建过程可以创建不同的表示。
UML 图—>
如图示 注重一创建了一个控制类Director帮我去根据客户的要求调用具体实现生产实物的方法。
控制类director和Builder是聚合关系,聚合关系是一种弱的拥有关系,控制类中包括抽象的建造类,但是控制类却不是抽象的建造者类的一部分。
这样用户只需要指定建造的类型就可以得到相应的实物,而具体建造的过程和细节不需知道。
建造者模式是在当创建一个复杂的对象的算法应该独立于该对象的组成部分以及它们的装配方式时
时适用的模式。
根据客户要求去创建一个人,是瘦子还是胖子,然后再瘦子和胖子的类中自己具体构建身体部位。
//构建人体的抽象类,避免构建身体的时候缺少失误(eg:少了胳膊腿啥的-_-)public abstract class PersonBuilder { public abstract void buildHead(); public abstract void buildbody(); public abstract void buildArmLeft(); public abstract void buildArmRight(); public abstract void buildLegLeft(); public abstract void buildLegRight(); /** * 创建人完毕得到的返回创建完的事例对象 * */ public abstract Person getResult();}
具体的身体构建,胖子类和瘦子类
/** * * 创建一個具体胖的人事例对象* */public class PersonFatBuilder extends PersonBuilder { Person person = new Person(); /** * 创建身体各个部件 * */ @Override public void buildHead() { // TODO Auto-generated method stub person.add("頭"); } @Override public void buildbody() { // TODO Auto-generated method stub person.add("ぶよぶよ体"); } @Override public void buildArmLeft() { // TODO Auto-generated method stub person.add("左の腕"); } @Override public void buildArmRight() { // TODO Auto-generated method stub person.add("右の腕"); } @Override public void buildLegLeft() { // TODO Auto-generated method stub person.add("左足"); } @Override public void buildLegRight() { // TODO Auto-generated method stub person.add("右足"); } /** * 创建人完毕得到的返回创建完的事例对象 * */ @Override public Person getResult() { return person; }}/** * * 创建一個具体瘦子的人事例对象* */public class PersonThinBuilder extends PersonBuilder { Person person = new Person(); /** * 创建身体各个部件 * */ @Override public void buildHead() { // TODO Auto-generated method stub person.add("頭"); } @Override public void buildbody() { // TODO Auto-generated method stub person.add("痩せてる体"); } @Override public void buildArmLeft() { // TODO Auto-generated method stub person.add("左の腕"); } @Override public void buildArmRight() { // TODO Auto-generated method stub person.add("右の腕"); } @Override public void buildLegLeft() { // TODO Auto-generated method stub person.add("左足"); } @Override public void buildLegRight() { // TODO Auto-generated method stub person.add("右足"); } @Override public Person getResult() { return person; }}
控制类,用来根据客户的要求去调用具体的实现,这样就能降低耦合
public class PersonDirector { /** * PersonDirector这个指挥类和PersonBuilder抽象类是聚合关系 * 所谓聚合时一种弱的拥有关系 * 体现的是A对象可以包含B对象,但B对象不是A对象的一部分 * UML标识用空心的菱形实线三角箭头表示 * ◇-> * * */// private PersonBuilder personBuilder;// public PersonDirector(PersonBuilder personBuilder) {// this.personBuilder = personBuilder;// } /** * 用指挥来建造过程 * */ public void CreatePerson(PersonBuilder personBuilder) { personBuilder.buildHead(); personBuilder.buildbody(); personBuilder.buildArmLeft(); personBuilder.buildArmRight(); personBuilder.buildLegLeft(); personBuilder.buildLegRight(); }}
人体类这里主要是用来方便显示构建的人物输出
import java.util.ArrayList;import java.util.List;public class Person { List<String> personList = new ArrayList<String>(); public void add(String shentibuwei) { personList.add(shentibuwei); }/** * 展示创建的人是什么样的 * * */ public void show() { for (int i = 0; i < personList.size(); i++) { System.out.println(personList.get(i) + "を描く"); } }}
客户端要求
public class custom { public static void main(String[] args) { // TODO Auto-generated method stub// Bulid胖子 PersonFatBuilder personFatBuilder = new PersonFatBuilder();// 创建指挥者的事例 PersonDirector pdFat = new PersonDirector();// 利用指挥者事例创建一个人,根据用户要求 pdFat.CreatePerson(personFatBuilder); /** * 创建人完毕得到的返回创建完的事例对象 * */ Person personFat = personFatBuilder.getResult(); /** * 展现 * */ personFat.show(); }}
好处—>
若需要改变一个产品的内部要求表示,则只需要再定义一个具体的建造类继承抽象的Builder类即可。
阅读全文
0 0
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- 大话设计模式之建造者模式
- <九>读<<大话设计模式>>之建造者模式
- 大话设计模式读后感之建造者模式(JAVA)
- 《大话设计模式》java实现之建造者模式
- 大话设计模式读书笔记之建造者模式
- 大话设计模式_建造者模式
- 大话设计模式--建造者模式
- 《大话设计模式》 -- 12.建造者模式
- 大话设计模式-建造者模式
- 大话设计模式—建造者模式
- 大话设计模式-建造者模式
- 大话设计模式13----建造者模式
- ios大话设计模式-建造者模式
- eclipse中tomcat启动超过45秒无法启动的问题解决
- 小码哥上海ui培训机构助你成为综合设计师
- jQuery遍历并获得后代的值
- AI影响将远超互联网 不在乎与AT市值差距
- try catch finally
- 大话设计模式之建造者模式
- WIN10下Java web开发环境变量的配置
- xpath&css选择器
- String的replace替换与PropertyPlaceholderHelper
- C++ 指针和NULL
- String类和标准模板库
- java ajax多文件上传并展示上传进度信息
- 笔记 自定义QListWidgetItem 为了让点击item 知道是 list中的第几个
- 剑指offer_9 变态跳台阶