星空网 > 软件开发 > ASP.net

【设计模式】2、生成器模式(建造者模式)

模式结构:

【设计模式】2、生成器模式(建造者模式)

 

 1 package com.shejimoshi.create.Builder; 2  3  4 /** 5  * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 6  *     适用性: 7  *       当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 8  *       当构造过程必须允许被构造的对象有不同的表示时 9  * 时间:2016年2月12日下午4:33:5910  * 作者:cutter_point11 */12 public abstract class PersonBuilder13 {14   //绘画一个人物需要使用到的工具15   protected String tool1;16   protected String tool2;17   18   public PersonBuilder(String t1, String t2)19   {20     this.tool1 = t1;21     this.tool2 = t2;22   }23   24   //绘画头25   public abstract void buildHead();26   //画身体27   public abstract void buildBody();28   //画左脚右脚29   public abstract void buildArmLeft();30   public abstract void buildArmRight();31   //画左手右手32   public abstract void buildLegLeft();33   public abstract void buildLegRight();34 }

我们的抽象生成器派生出相应的子类,用来构造相应的实际使用类型

 1 package com.shejimoshi.create.Builder; 2  3  4 /** 5  * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 6  *     适用性: 7  *       当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 8  *       当构造过程必须允许被构造的对象有不同的表示时 9  * 时间:2016年2月12日下午4:50:3110  * 作者:cutter_point11 */12 public class PersonThinBuilder extends PersonBuilder13 {14 15   public PersonThinBuilder(String t1, String t2)16   {17     super(t1, t2);18   }19 20   @Override21   public void buildHead()22   {23     System.out.println("画出一个瘦子的头");24   }25 26   @Override27   public void buildBody()28   {29     System.out.println("画出一个瘦子的身体");30   }31 32   @Override33   public void buildArmLeft()34   {35     System.out.println("画出瘦子的左臂");36   }37 38   @Override39   public void buildArmRight()40   {41     System.out.println("画出瘦子的右臂");42   }43 44   @Override45   public void buildLegLeft()46   {47     System.out.println("画出瘦子左腿");48   }49 50   @Override51   public void buildLegRight()52   {53     System.out.println("画出瘦子的右腿");54   }55 56 }

 

 1 package com.shejimoshi.create.Builder; 2  3  4 /** 5  * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 6  *     适用性: 7  *       当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 8  *       当构造过程必须允许被构造的对象有不同的表示时 9  * 时间:2016年2月12日下午4:53:4910  * 作者:cutter_point11 */12 public class PersonFatBuilder extends PersonBuilder13 {14 15   public PersonFatBuilder(String t1, String t2)16   {17     super(t1, t2);18   }19 20   @Override21   public void buildHead()22   {23     System.out.println("画出一个胖子的头");24   }25 26   @Override27   public void buildBody()28   {29     System.out.println("画出一个胖子的身体");30   }31 32   @Override33   public void buildArmLeft()34   {35     System.out.println("画出胖子的左臂");36   }37 38   @Override39   public void buildArmRight()40   {41     System.out.println("画出胖子的右臂");42   }43 44   @Override45   public void buildLegLeft()46   {47     System.out.println("画出胖子左腿");48   }49 50   @Override51   public void buildLegRight()52   {53     System.out.println("画出胖子的右腿");54   }55 56 }

我们的生成器交给指挥者来实现创建的动作

 1 package com.shejimoshi.create.Builder; 2  3  4 /** 5  * 功能:创建人物的指挥者 6  * 时间:2016年2月12日下午4:55:14 7  * 作者:cutter_point 8 */ 9 public class PersonDirector10 {11   private PersonBuilder pb;12   13   //传递相应的人物创建模型14   public PersonDirector(PersonBuilder pber)15   {16     this.pb = pber;17   }18   19   //创建一个人20   public void createPerson()21   {22     pb.buildHead();23     pb.buildBody();24     pb.buildArmLeft();25     pb.buildArmRight();26     pb.buildLegLeft();27     pb.buildLegRight();28   }29 }

 

测试案例:

 1 package com.shejimoshi.create.Builder; 2  3  4 /** 5  * 功能:客户端程序 6  * 时间:2016年2月12日下午4:57:41 7  * 作者:cutter_point 8 */ 9 public class Test10 {11   //创建相应的人物12   public static void create(PersonBuilder pb)13   {14     //借助参数传过来的模型创建相应的对象15     PersonDirector pd = new PersonDirector(pb);16     pd.createPerson();17   }18   19   public static void main(String []args)20   {21     PersonThinBuilder ptb = new PersonThinBuilder("图像工具", "画笔");22     create(ptb); //创建一个瘦子23     System.out.println("==============================================================");24     PersonFatBuilder pfb = new PersonFatBuilder("图像工具", "画笔");25     create(pfb);26   }27 }

运行结果:

 1 画出一个瘦子的头 2 画出一个瘦子的身体 3 画出瘦子的左臂 4 画出瘦子的右臂 5 画出瘦子左腿 6 画出瘦子的右腿 7 ============================================================== 8 画出一个胖子的头 9 画出一个胖子的身体10 画出胖子的左臂11 画出胖子的右臂12 画出胖子左腿13 画出胖子的右腿

 




原标题:【设计模式】2、生成器模式(建造者模式)

关键词:设计模式

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

大华超级市场 99 Ranch Market :https://www.goluckyvip.com/tag/29610.html
大货专线物流:https://www.goluckyvip.com/tag/29612.html
大件海运fba:https://www.goluckyvip.com/tag/29614.html
大件货海外仓:https://www.goluckyvip.com/tag/29615.html
大件货物海运:https://www.goluckyvip.com/tag/29616.html
大件空运物流:https://www.goluckyvip.com/tag/29617.html
字节跳动辟谣!TikTok收紧美国开店政策为不实信息:https://www.goluckyvip.com/news/188212.html
2024北京庞各庄镇梨花节开幕时间是几号?:https://www.vstour.cn/a/365179.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流