一、 建造者(Builder)模式

  建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

二、 Builder模式的结构:

  建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的方法:一个是建造方法,另一个是结果返还方法。

  具体建造者(Concrete Builder)角色:担任这个角色的是于应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括:

  • 实现Builder角色提供的接口,一步一步完成创建产品实例的过程。
  • 在建造过程完成后,提供产品的实例。

  指导者(Director)角色:担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。

  产品(Product)角色:产品便是建造中的复杂对象。

  指导者角色是于客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但却不为客户端所知。

     /// <summary>
/// 建造者(Builder)模式
/// 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,
/// 从而可以使一个建造过程生成具有不同的内部表象的产品对象。
/// </summary>
class Program
{
static void Main(string[] args)
{
//创建 指导者 跟 建设者实例
Shop shop = new Shop();
VehicleBuilder mt = new MotorCycleBuilder();
VehicleBuilder car = new CarBuilder(); shop.Construct(mt);
Vehicle vehicle = mt.Vehicle;
vehicle.Show(); shop.Construct(car);
Vehicle vehicles = car.Vehicle;
vehicles.Show(); Console.ReadLine();
}
} /// <summary>
/// 指导者
/// </summary>
public class Shop
{
// 方法
public void Construct(VehicleBuilder vehicleBuilder)
{
vehicleBuilder.BuildFrame();
vehicleBuilder.BuildEngine();
vehicleBuilder.BuildWheels();
vehicleBuilder.BuildDoors();
}
} /// <summary>
/// 建造者 角色 VehicleBuilder 车辆建造者
/// </summary>
public abstract class VehicleBuilder
{
// Fields
protected Vehicle vehicle; // 产品类型 属性
public Vehicle Vehicle
{
get { return vehicle; }
}
// 方法
abstract public void BuildFrame();
abstract public void BuildEngine();
abstract public void BuildWheels();
abstract public void BuildDoors();
} /// <summary>
/// 具体 建造者 汽车(Car)
/// </summary>
public class CarBuilder : VehicleBuilder
{
override public void BuildFrame()
{
vehicle = new Vehicle("Car");
vehicle["frame"] = "Car Frame";
} override public void BuildEngine()
{
vehicle["engine"] = "2500 cc";
} override public void BuildWheels()
{
vehicle["wheels"] = "";
} override public void BuildDoors()
{
vehicle["doors"] = "";
}
} /// <summary>
/// 具体 建造者 摩托车(MotorCycle)
/// </summary>
public class MotorCycleBuilder : VehicleBuilder
{
public override void BuildFrame()
{
vehicle = new Vehicle("MotorCycle");
vehicle["frame"] = "MotorCycle Frame";
} override public void BuildEngine()
{
vehicle["engine"] = "500 cc";
} override public void BuildWheels()
{
vehicle["wheels"] = "";
} override public void BuildDoors()
{
vehicle["doors"] = "";
}
} /// <summary>
/// 产品
/// </summary>
public class Vehicle
{
private string type;
private Hashtable parts = new Hashtable(); // 构造函数
public Vehicle(string type)
{
this.type = type;
} // 索引
public object this[string key]
{
get { return parts[key]; }
set { parts[key] = value; }
} // 方法
public void Show()
{
Console.WriteLine(" ---------------------------");
Console.WriteLine(" Vehicle Type: " + type);
Console.WriteLine(" Frame : " + parts["frame"]);
Console.WriteLine(" Engine : " + parts["engine"]);
Console.WriteLine(" #Wheels: " + parts["wheels"]);
Console.WriteLine(" #Doors : " + parts["doors"]);
} }

三、 在什么情况下使用建造者模式

以下情况应当使用建造者模式:

1、 需要生成的产品对象有复杂的内部结构。
2、 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
3、 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

使用建造者模式主要有以下效果:

1、 建造模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。
2、 每一个Builder都相对独立,而与其它的Builder无关。
3、 模式所建造的最终产品更易于控制。

建造者(Builder)模式 *的更多相关文章

  1. Java设计模式-建造者(Builder)模式

    目录 由来 使用 1. 定义抽象 Builder 2. 定义具体 Builder类 3. 定义具体 Director类 4. 测试 定义 文字定义 结构图 优点 举例 @ 最近在看Mybatis的源码 ...

  2. 建造者(Builder)模式

    建造者模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 产品的 ...

  3. 设计模式C++描述----07.建造者(Builder)模式

    一. 概述 Builder 模式要解决的问题是:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开 来,这样做的好处就是通过一步 ...

  4. Android 建造者(Builder)模式

    关于 Builder 模式 详述:http://blog.csdn.net/jjwwmlp456/article/details/39890699 先来张图 看到 Android  中 使用了 Bui ...

  5. 设计模式--建造者(Builder)模式

    将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示                                                         --<设计模 ...

  6. 设计模式Builder(建造者)模式

    1.出现原因 在软件系统中,有时候会面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂的对象的各个部分可能面临着剧烈的变化,但是把他们组合在一起的算法 ...

  7. Java设计模式--------建造者模式(Builder模式)

    Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构 ...

  8. Java设计模式(3)建造者模式(Builder模式)

    Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构 ...

  9. Builder模式(建造者模式)

    在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成.那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Build ...

  10. (一)Builder(建造者)模式

    我们一般在构建javabean的对象的时候通常有三种写法: 1.直接通过构造函数传参的方式设置属性,这种方法如果属性过多的话会让构造函数十分臃肿,而且不能灵活的选择只设置某些参数. 2.采用重叠构造区 ...

随机推荐

  1. 1、Flume基础扫盲

    1.概述 Flume是一个分布式.可靠的和高可用的海量日志采集.聚合和传输的系统.支持在系统中定制种类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的 ...

  2. linux 下安装php扩展

    linux下安装php扩展 步骤: 1.在扩展解压包目录执行 phpize 2.执行 ./configure --with-php-config=/usr/local/php/bin/php-conf ...

  3. FPGA中的“门”

    逻辑门 在ASIC的世界里,衡量器件容量的常用标准是等效门.这是因为不同的厂商在单元库里提供了不同的功能模块,而每个功能模块的实现都要求不同数量的晶体管.这样在两个器件之间比较容量和复杂度就很困难. ...

  4. 全文检索引擎Solr系列——Solr核心概念、配置文件

    Document Document是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的一条记录,可以包含一个或多个字段(Field),每个字段包含一个name和文本值. ...

  5. Netty实现简单HTTP服务器

    netty package com.dxz.nettydemo.http; import java.io.UnsupportedEncodingException; import io.netty.b ...

  6. codeforce 985C Liebig's Barrels(贪心+思维)

    Liebig's Barrels time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  7. pt工具之pt-archiver

    # tar -zxvf percona-toolkit-2.2.17.tar.gz# yum -y install perl perl-IO-Socket-SSL perl-DBD-MySQL per ...

  8. HttpURLConnection连接网页和获取数据的使用实例

    HttpURLConnection是java.net 里面自带的一个类,非常好用.虽然现在很多人用阿帕奇的HttpClient,但HttpURLConnection也是个不错的选择. 其实使用方法非常 ...

  9. Strom简单介绍

    1.离线计算是什么? 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据.MapReduce批量计算数据.Hive批量计算数据. ...

  10. PHP 取网页变量

    $_POST["test"]; $_GET["test"];isset();  if(isset($_GET["yyuid"]))