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. Ping批量函数

    function pingm ($file){ $ips = gc $file foreach ($ip in $ips) { $cmdline +="ping " + $ip + ...

  2. applicationContext.xml存放的位置

    web.xml中classpath:和classpath*:  有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件 ...

  3. Swift学习笔记二

    Swift是苹果公司开发的一门新语言,它当然具备面向对象的许多特性,现在开始介绍Swift中类和对象的语法. 对象和类 用"class"加上类名字来创建一个类,属性声明和声明常量或 ...

  4. TreeView1MouseMove

    procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,   Y: Integer); var   nod ...

  5. [React] Styling React Components With Aphrodite

    Aphrodite is a library styling React components. You get all the benefits of inline styles (encapsul ...

  6. yii 隐藏index.php的步骤

    Apache 1.开启apache的mod_rewrite模块       去掉LoadModule rewrite_module modules/mod_rewrite.so前的“#”符号     ...

  7. percona-toolkit工具包的使用教程

    http://blog.chinaunix.net/uid-20639775-id-3236916.html     本文收集了percona-toolkit工具包中比较常用的工具集,写成教程,方便自 ...

  8. PowerDesigner自定义列和过滤器

    好多次要增加注释列,默认值列都忘了怎么设置,写下来以备后用:) 选中表,然后右键,选择properties->columns->点击下图中那个不显眼的小图标(Customize Colum ...

  9. Lexia3 Citroen/Peugeot Diagnostic tool install instruction

    We knew that Lexia-3 is a professional Citroen and Peugeot diagnostic interface, it’s both easy-usin ...

  10. [XBee] ZigBee学习笔记

    转自:http://blog.csdn.net/wanghanjiett/article/details/6931867 几个重要概念: node(节点): 在zigbee堆栈中最多有三种节点:Coo ...