【设计模式】2、生成器模式(建造者模式)
2016-02-12 17:14
260 查看
模式结构:
我们的抽象生成器派生出相应的子类,用来构造相应的实际使用类型
我们的生成器交给指挥者来实现创建的动作
测试案例:
运行结果:
package com.shejimoshi.create.Builder; /** * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 * 适用性: * 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 * 当构造过程必须允许被构造的对象有不同的表示时 * 时间:2016年2月12日下午4:33:59 * 作者:cutter_point */ public abstract class PersonBuilder { //绘画一个人物需要使用到的工具 protected String tool1; protected String tool2; public PersonBuilder(String t1, String t2) { this.tool1 = t1; this.tool2 = t2; } //绘画头 public abstract void buildHead(); //画身体 public abstract void buildBody(); //画左脚右脚 public abstract void buildArmLeft(); public abstract void buildArmRight(); //画左手右手 public abstract void buildLegLeft(); public abstract void buildLegRight(); }
我们的抽象生成器派生出相应的子类,用来构造相应的实际使用类型
package com.shejimoshi.create.Builder; /** * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 * 适用性: * 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 * 当构造过程必须允许被构造的对象有不同的表示时 * 时间:2016年2月12日下午4:50:31 * 作者:cutter_point */ public class PersonThinBuilder extends PersonBuilder { public PersonThinBuilder(String t1, String t2) { super(t1, t2); } @Override public void buildHead() { System.out.println("画出一个瘦子的头"); } @Override public void buildBody() { System.out.println("画出一个瘦子的身体"); } @Override public void buildArmLeft() { System.out.println("画出瘦子的左臂"); } @Override public void buildArmRight() { System.out.println("画出瘦子的右臂"); } @Override public void buildLegLeft() { System.out.println("画出瘦子左腿"); } @Override public void buildLegRight() { System.out.println("画出瘦子的右腿"); } }
package com.shejimoshi.create.Builder; /** * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 * 适用性: * 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 * 当构造过程必须允许被构造的对象有不同的表示时 * 时间:2016年2月12日下午4:53:49 * 作者:cutter_point */ public class PersonFatBuilder extends PersonBuilder { public PersonFatBuilder(String t1, String t2) { super(t1, t2); } @Override public void buildHead() { System.out.println("画出一个胖子的头"); } @Override public void buildBody() { System.out.println("画出一个胖子的身体"); } @Override public void buildArmLeft() { System.out.println("画出胖子的左臂"); } @Override public void buildArmRight() { System.out.println("画出胖子的右臂"); } @Override public void buildLegLeft() { System.out.println("画出胖子左腿"); } @Override public void buildLegRight() { System.out.println("画出胖子的右腿"); } }
我们的生成器交给指挥者来实现创建的动作
package com.shejimoshi.create.Builder; /** * 功能:创建人物的指挥者 * 时间:2016年2月12日下午4:55:14 * 作者:cutter_point */ public class PersonDirector { private PersonBuilder pb; //传递相应的人物创建模型 public PersonDirector(PersonBuilder pber) { this.pb = pber; } //创建一个人 public void createPerson() { pb.buildHead(); pb.buildBody(); pb.buildArmLeft(); pb.buildArmRight(); pb.buildLegLeft(); pb.buildLegRight(); } }
测试案例:
package com.shejimoshi.create.Builder; /** * 功能:客户端程序 * 时间:2016年2月12日下午4:57:41 * 作者:cutter_point */ public class Test { //创建相应的人物 public static void create(PersonBuilder pb) { //借助参数传过来的模型创建相应的对象 PersonDirector pd = new PersonDirector(pb); pd.createPerson(); } public static void main(String []args) { PersonThinBuilder ptb = new PersonThinBuilder("图像工具", "画笔"); create(ptb); //创建一个瘦子 System.out.println("=============================================================="); PersonFatBuilder pfb = new PersonFatBuilder("图像工具", "画笔"); create(pfb); } }
运行结果:
画出一个瘦子的头 画出一个瘦子的身体 画出瘦子的左臂 画出瘦子的右臂 画出瘦子左腿 画出瘦子的右腿 ============================================================== 画出一个胖子的头 画出一个胖子的身体 画出胖子的左臂 画出胖子的右臂 画出胖子左腿 画出胖子的右腿
相关文章推荐
- c++ string 用法总结
- QT的Meta-Object系统
- 需要经常看的故事
- vs2013连接mysql mysql_init未定义
- Android TV Studuy1-2
- ATL与COM之间的关系、ATL的特点与基本使用方法
- Xcode7中你一定要知道的炸裂调试神技
- android:从另外一个activity中返回数据
- [LeetCode]Gas Station
- 从初识Linux到离不开系列(四)循序渐进
- 相当重要---部署OGG对Oracle Database 补丁的要求
- 算法学习--贪心算法
- Python教程学习简记8--Python 高阶函数 map/reduce filter sorted
- 深入理解Java虚拟机----(十一)线程安全与锁优化
- 舍身喂虎
- 后缀数组
- 2.ORM思想
- FMDB初步使用小结
- debian/ubuntu/deepin中Harminv 编译与安装
- HDU3466(01背包变种)