1.概念:将一个复杂对象的构建和他的表示分离,使得同样的构件可以创建不同的表示。

2.实例:肯德基和中餐,肯德基抽象了整个做菜的复杂过程(相同的构建),然后在不同的店铺进行实现(不同的表示)。中餐往往做菜是没有统一的过程的。
 
3.类图:
     
4.Code
      public abstract class PersonBuilder 
      {
          protected Graphics g;
          protected Pen p;
          public PersonBuilder(Graphics g,Pen p)
          {
               this.g=g;
               this.p=p;
          }
 
          public abstract void BuildHead();
          public abstract void BuildBody();
          public abstract void BuildOther();
      }
 
         public class ThinPerson :PersonBuilder
         {
               public ThinPerson(Graphics g,Pen p):base(g,p){}
               public override void BuildHead(){}
               public override void BuildBody() { }
               public override void BuildOther() { }
         }
 
          public class FatPerson : PersonBuilder 
          {
               public FatPerson(Graphics g, Pen p) : base(g, p) { }
               public override void BuildHead() { }
               public override void BuildBody() { }
               public override void BuildOther() { }
          }
 
          public class PersonDirector 
          {
               private PersonBuilder _pb;
               public PersonDirector(PersonBuilder pb) 
               {
                    _pb = pb;
               }
 
               public void CreatePerson() 
               {
                    _pb.BuildHead();

_pb.BuildBody();

                    _pb.BuildOther();
               }
          }
 
     思考:如果少了PersonDirector,客户端创建一个人,需要调用三个方法,而且可能调用遗漏
               为此,必须新增PersonDirector类,进行统一管理。
 
     客户端:
          ThinPerson tp=new ThinPerson(picturebox1.CreateGraphics(),new Pen(Color.Red));
          PersonDirector pd=new PersonDirector(tp);
          pd.CreatePerson();
 
5.扩展考虑:
     5.1如果新增一个TallPerson呢? 继承PersonBuilder即可
     5.2如果需要细化人物生成?比如创建左脚,右脚等等呢?在子类新增。
 
6.使用环境
     复杂类,内部构建顺序是稳定的,但是具体的构建是复杂变化的
 
 
 
 
 

1.6建造者模式(生成器模式) Builder的更多相关文章

  1. 设计模式(4)建造者模式/生成器模式(Builder)

    设计模式(0)简单工厂模式 设计模式(1)单例模式(Singleton) 设计模式(2)工厂方法模式(Factory Method) 设计模式(3)抽象工厂模式(Abstract Factory) 源 ...

  2. Java设计模式之建造者模式(生成器模式)

    建造者模式: 也叫生成器模式.用来隐藏复合对象的创建过程,他把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象. 总结一句就是封装一个对象的构造过程,并允许按步骤构造 ...

  3. 设计模式 | 建造者模式/生成器模式(builder)

    定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 结构:(书中图,侵删) 一个产品类 一个指定产品各个部件的抽象创建接口 若干个实现了各个部件的具体实现的创建类 一个 ...

  4. 设计模式——建造者模式/生成器模式(C++实现)

    #include <iostream> #include <string> using namespace std; class STProduct { public: voi ...

  5. 设计模式十: 生成器模式(Builder Pattern)

    简介 生成器模式属于创建型模式的一种, 又叫建造者模式. 生成器模式涉及4个关键角色:产品(Product),抽象生成器(builder),具体生成器(ConcreteBuilder),指挥者(Dir ...

  6. 【设计模式】- 生成器模式(Builder)

    生成器模式 建造者模式.Builder 生成器模式 也叫建造者模式,可以理解成可以分步骤创建一个复杂的对象.在该模式中允许你使用相同的创建代码生成不同类型和形式的对象. 生成器的结构模式 生成器(Bu ...

  7. C#设计模式——生成器模式(Builder Pattern)

    一.概述在软件系统中,有时候面临着复杂的对象创建,该对象由一定算法构成的子对象组成,由于需求变化,这些子对象会经常变换,但组合在一起的算法却是稳定的.生成器模式可以处理这类对象的构建,它提供了一种封装 ...

  8. 设计模式 — 建造者(生成器)模式(Builder)

    考虑这样一种业务场景,我们构建一个业务对象,但是这个业务对象及其复杂.为了代码的根号的可读性,我们会把这个对象的构建过程根据精密联系的程度来拆分成几个类来完成.最后再放到一起使用来生成复杂对象.这个业 ...

  9. Java设计模式-Builder生成器模式

    概念: 生成器模式也称之为建造者模式.生成器模式的意图在于将一个复杂的构建与其表示相分离,构建与产品分离. UML: Ibuild接口清晰地反映了创建产品Product的流程. 生成器模式涉及4个关键 ...

随机推荐

  1. 直接下载Google Play市场的APK

    传送门在这里:http://apps.evozi.com/apk-downloader/ 似乎很方便.很迅速的样子,忍不住在这里记录一下.

  2. C# is与as

    1.使用场景: 强制类型转换,有可能会导致异常.is与as就是为了解决这一问题,is与as永远不会抛出异常. 2.is判断一个对象是否兼容于指定的类型,考虑里氏代换.Dog是Animal,而Anima ...

  3. MyBatis之七:使用generator工具

    可以将mybatis理解成一种半自动化orm框架,通过注解或者配置xml映射文件来手写相关sql语句,不能像我之前介绍orm的文章那样全对象化操作数据库增删改查.其实你会发现,手写配置xml映射文件是 ...

  4. 使用C# 生成word记录

    private void button1_Click(object sender, System.EventArgs e) { object oMissing = System.Reflection. ...

  5. osg 笔记一 (转)

    场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率 场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息.根节点 ...

  6. 使用安卓读取sqlite数据库方法记录

    最近要实现android读取sqlite数据库文件,在这里先做一个英汉字典的例子.主要是输入英语到数据库中查询相应的汉语意思,将其答案输出.数据库采用sqlite3. 如图: 实现过程完全是按照参考文 ...

  7. WIN8重见开始菜单

    从win7进入win8感觉不适应,做为一个程序开发人员,更觉得不爽,因此想着如何恢复开始菜单,查了很多文章终于找到方法 首先,在桌面版Windows 8启动资源管理器,单击工具栏上的“查看”选项卡后, ...

  8. ABAP屏幕基础

    Select语句的使用 关键字into后可以加 structure(结构体), internal table(内表) 和 fieldlist(字段列表) Authority 权限 程序员可以根据权限对 ...

  9. divide-conquer-combine(4.1 from the introduction to algorithm)

    this example is from chapter 4 in <the introduction to algorithm> the main idea is all showed ...

  10. Android:TabHost实现Tab切换

    TabHost是整个Tab的容器,包含TabWidget和FrameLayout两个部分,TabWidget是每个Tab的表情,FrameLayout是Tab内容. 实现方式有两种: 1.继承TabA ...