大话设计模式之建造者模式(生成器模式) 建造队与指挥者的纠缠
2015-12-30 11:41
615 查看
建造者模式,相信很多人都听说过,或者使用过,也叫做生成器模式。例如我们都知道人由头部、身体、双手和双脚组成,我们使用建造者模式来实现一下这个功能。
第一步:创建一个人对象类,有四个属性,分别代表头部、手、脚、身体,同时也有一个行为,就是显示自己。
第一步:创建一个人对象类,有四个属性,分别代表头部、手、脚、身体,同时也有一个行为,就是显示自己。
public class Person { private String head; private String boby; private String hand; private String foot; public void show() { System.out.println(this.head + "," + this.boby + "," + this.hand + "," + this.foot); } public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBoby() { return boby; } public void setBoby(String boby) { this.boby = boby; } public String getHand() { return hand; } public void setHand(String hand) { this.hand = hand; } public String getFoot() { return foot; } public void setFoot(String foot) { this.foot = foot; } }第二步:抽象一个人的建造类,建造步骤有四个,分别为建造头部、建造双手、建造双脚和建造身体,具体的实现由子类来实现,最后有一个提供成品的方法,抽象类约束了子类的行为,子类必须实现这个五个方法,避免了子类遗漏某个建造步骤的可能性。
//建造一个人对象 public abstract class PersonBuilder { public abstract void head(); public abstract void boby(); public abstract void hand(); public abstract void foot(); public abstract Person getPerson(); }第三步:创建一个瘦人建造队和一个胖人建造队飞,分别创建瘦人和胖子。
//建造瘦人 public class ThinPersonBuilder extends PersonBuilder { private Person thinPerson = new Person(); @Override public void boby() { thinPerson.setBoby("偏瘦性身体"); } @Override public void foot() { thinPerson.setFoot("双脚"); } @Override public void hand() { thinPerson.setHand("双手"); } @Override public void head() { thinPerson.setHead("头"); } @Override public Person getPerson() { return thinPerson; } }
//建造胖人 public class FatPersonBuilder extends PersonBuilder { private Person thinPerson = new Person(); @Override public void boby() { thinPerson.setBoby("偏胖性身体"); } @Override public void foot() { thinPerson.setFoot("双脚"); } @Override public void hand() { thinPerson.setHand("双手"); } @Override public void head() { thinPerson.setHead("头"); } @Override public Person getPerson() { return thinPerson; } }第四步:我们都知道建造队都有指挥者,那么我们就创建一个指挥者类,指挥建造队如何建造,指挥者负责指挥建造对进行工作。
//指挥者 public class Director { //创建一个人对象,具体是瘦人还是胖人由参数决定 public void buildPerson(PersonBuilder personBuilder) { //指挥建造过程 personBuilder.head(); personBuilder.boby(); personBuilder.hand(); personBuilder.foot(); } }第五步:我们来测试一下。我们首先创建一个指挥者,接着创建一个瘦人建造队,然后让指挥者指挥建造队进行建造人,最后向建造队取得建造完成的成品,即我们需要的人对象,然后显示一下。
//测试类 public class Test { public static void main(String[] args) { Director director = new Director(); //指挥者 ThinPersonBuilder thinPersonBuilder = new ThinPersonBuilder(); director.buildPerson(thinPersonBuilder); //指挥瘦人建造队 Person thinPerson = thinPersonBuilder.getPerson(); //瘦人建造 thinPerson.show(); FatPersonBuilder fatPersonBuilder = new FatPersonBuilder(); director.buildPerson(fatPersonBuilder);//指挥胖人建造队 Person fatPerson = fatPersonBuilder.getPerson(); //胖人建造 fatPerson.show(); } }总结:建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。从而可以使得可拓展,可维护。
相关文章推荐
- 对比iOS网络组件:AFNetworking VS ASIHTTPRequest
- CoreAnimation学习(图层)
- 简单地新闻头条滚动效果
- 性能测试中的2-5-8原则
- XML类似的解析时,会遇到'XXX' 不是 'NCName' 的有效值的问题
- Spring控制器接收Json数组——工具Gson
- cRuntime函数之(getenv_s)
- Gson使用心得(二):Map反序列化的一个陷阱
- 用PUSHD/POPD获得bat文件执行的路径
- HTML+CSS
- 5-2 然后是几点
- php return的使用
- delphi中INI 文件的创建与使用
- 详解PHP中的null合并运算符
- [python] 专题八.多线程编程之thread和threading
- 正则表达式常用字符集
- JSP中的EL表达式使用
- 响应式布局2之Media Query(媒介查询)
- 稀疏分解与稀疏重建的区别
- Java设计模式_行为型_模板方法模式_论房地产开发