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. Unity的使用

    1.Ioc功能使用: 1.介绍对象的生命周期 顾名思义 在容器中存在的实例,是可以定义其生命周期的. Unity提供了 几种自带的 生命周期 管理类(常用的已标红) ContainerControll ...

  2. BW导航属性设置

    BW中的Attribute(属性)分为Display Att.和Navigation(导航) Att.,这里我就简称Dis. att和Nav. att了,导航属性可以做为变量来查询和做限制 1.首先进 ...

  3. Js Pattern - Namespace Pattern

    bad code // BEFORE: 5 globals // Warning: antipattern // constructors function Parent() {} function ...

  4. delphi 插入表格HTML代码

     <table width="174"  height="76" border="1" align="center" ...

  5. ROC和AUC介绍以及如何计算AUC

    原文:http://alexkong.net/2013/06/introduction-to-auc-and-roc/ 为什么使用ROC曲线 既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因 ...

  6. Cloudera集群中提交Spark任务出现java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily错误解决

    Cloudera及相关的组件版本 Cloudera: 5.7.0 Hbase: 1.20 Hadoop: 2.6.0 ZooKeeper: 3.4.5 就算是引用了相应的组件依赖,依然是报一样的错误! ...

  7. Linux 学习笔记 查看文件内容诸多命令

    查看文件内容 1.查看文件统计信息 stat 提供文件系统上某个文件的所有状态信息 2.查看文件类型 file 用来查看文件类型 (该命令将文件分成3类:文本类型:可执行文件:数据文件) 如果你有从未 ...

  8. ESX虚拟机文件列表详解

    http://jackiechen.blog.51cto.com/196075/210492 关闭状态时的文件列表: *-flat.vmdk:虚拟机的原始磁盘文件,包含整个虚拟机镜像.   *.nvr ...

  9. Honda HDS IMMO PCM Code calculator Free Download

    HDS IMMO PCM Code calculator software for Honda vehicle models is free download available in Eobd2.f ...

  10. [Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test)

    Visual Studio 2012可以说是迄今为止微软VS开发工具中用户体验最好的产品,无论是速度还是体验以及功能,都非常出色,但是,使用了一段时间后发现有一个之前版本VS都有的功能却在Visual ...