一、建造者模式简介(Brief Introduction)

建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。
建造者模式的优点是:使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以如要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

二、解决的问题(What To Solve)

主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但是对象内部的构建通常面临着复杂的变化。

三、建造者模式分析(Analysis)

1、建造者模式结构

Product:具体的产品。
Director:指挥者,构建一个使用Builder接口的对象。
Builder接口:是为创建一个Product对象的各个组件指定的抽象接口
ConcreteBuilder:具体的建造者,实现Builder接口,构造和装配各个部

2、源代码

1、具体产品Product
public class Product
{
    private IList<string> parts = new List<string>();
 
    public void Add(string part)
    {
        parts.Add(part);
    }
 
    public void Show()
    {
        Console.WriteLine("产品开始创建......");
        foreach (string part in parts)
        {
            Console.WriteLine("部件" + part);
        }
        Console.WriteLine("产品完成创建");
    }
}
 
2、抽象建造者Builder及其具体建造者ConcreteBuilder1,ConcreteBuilder2
public abstract class Builder
{
    public abstract void BuildPartA();
    public abstract void BuildPartB();
    public abstract Product GetResult();
}
 
public class ConcreteBuilder1 : Builder
{
    Product product = new Product();
    public override void BuildPartA()
    {
        product.Add("A1");
    }
 
    public override void BuildPartB()
    {
        product.Add("B1");
    }
 
    public override Product GetResult()
    {
        return product;
    }
}
 
public class ConcreteBuilder2 : Builder
{
    Product product = new Product();
    public override void BuildPartA()
    {
        product.Add("A2");
    }
 
    public override void BuildPartB()
    {
        product.Add("B2");
    }
 
    public override Product GetResult()
    {
        return product;
    }
}
 
3、指挥者类Director
/// <summary>
/// 指挥建造过程
/// </summary>
public class Director
{
    public void Construct(Builder builder)
    {
        builder.BuildPartA();
        builder.BuildPartB();
    }
    StringBuilder
}
 
4、客户端代码
static void Main(string[] args)
{
    Director director = new Director();
    Builder builder1 = new ConcreteBuilder1();
    Builder builder2 = new ConcreteBuilder2();
 
    director.Construct(builder1);
    Product product1 = builder1.GetResult();
    product1.Show();
 
    director.Construct(builder2);
    Product product2 = builder2.GetResult();
    product2.Show();
 
    Console.Read();
}

3、程序运行结果

本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/262818,如需转载请自行联系原作者

Net设计模式实例之建造者模式(Builder Pattern)(1)相关推荐

  1. Net设计模式实例之建造者模式(Builder Pattern)(2)

    四.案例分析(Example) 1.场景 假设房子只有房顶和墙(Roof And Walls)<?XML:NAMESPACE PREFIX = O /> Jane和 Joe两个客户需要从建 ...

  2. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  3. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

  4. UE4 C++设计模式:建造者模式(Builder Pattern)

    目录 描述 套路 使用场景 优缺点 UE4实践 具体复杂产品-门派角色 抽象建造者-角色构造器 具体建造者-纯阳角色构造器 具体建造者-七秀角色构造器 创建指挥者(Director)-角色创建指挥器 ...

  5. 大厦设计师 -- 建造者模式 (Builder Pattern) 介绍 使用案例场景分析 优缺点 及代码演示

    一句话概括: 使用多个简单对象一步一步构建成复杂对象,将复杂对象的构建与表示相分离. 补充介绍: 建造者模式(Builder Pattern)中有一个 Builder 类,这个类会一步一步构造最终的对 ...

  6. Net设计模式实例之桥接模式( Bridge Pattern)(4)

    3.客户端代码<?XML:NAMESPACE PREFIX = O /> static void <?XML:NAMESPACE PREFIX = ST2 />Main(str ...

  7. Net设计模式实例之备忘录模式(Memento Pattern)

    一.备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以就该对 ...

  8. Net设计模式实例之桥接模式( Bridge Pattern)(2)

    四.桥接模式实例分析(Example) 1.场景 业务对象(BusinessObject)与数据对象(DataObject)分离,即业务对象CustormerBase与数据对象DataObject分离 ...

  9. 设计模式系列之建造者模式构建实体类

    设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...

  10. 【设计模式自习室】建造者模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

最新文章

  1. facade-门面模式
  2. 数据恢复工具,每秒钟扫描 1000万文件!
  3. idea使用dababase tools时导出db2建表语句,索引显示错误
  4. STL源码剖析 slist单向链表概述
  5. 只需两步快速获取微信小程序源码
  6. Altium Designer(九):DXF+DWG
  7. 独角兽影视APP系统源码/双端影视APP源码
  8. 音视频开发系列(3)音频编解码的原理
  9. 算命小程序公历农历阴历阳历切换选择组件
  10. 思源宋体安装过程记录
  11. html中js左右图片切换效果,JS实现图片切换特效
  12. ✨✨✨【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(二)✨✨✨
  13. win10管理员名称更改方法
  14. [个人记录]春招C/C++后台/运维面试被问到的那些知识点(第一周)
  15. 在eclips中配置maven
  16. 电力设备事故演练仿真培训_电力事故VR培训_广州华锐互动
  17. 基于QT4的智能温度采集控制系统
  18. 计算机网络技术原理文献,计算机类毕业论文参考文献汇总
  19. RS507-ASEMI整流桥RS507
  20. 网络上的优美感人句子

热门文章

  1. gcc/g++参数详解
  2. 【OpenCV学习笔记】【函数学习】十一(读入图像﹑显示图像和保存图像)
  3. 从零基础入门Tensorflow2.0 ----七、35. 文本生成之---1.数据处理
  4. 我背着女朋友,用 Python 偷偷抓取了她的行踪(单身狗勿进)
  5. 周五,放松心情,听我来分享问题背后的背后(二)
  6. Jupyter notebook文件默认存储路径以及更改方法
  7. java虚拟机内存存储一个对象_java虚拟机在java堆中对象内存分配、布局、访问
  8. 性能测试--jmeter中HTTP Cookie管理器的使用【18】
  9. 性能测试--jmeter中的函数助手【15】
  10. 文件怎么更新_iOS屏蔽更新描述文件以及超级详细安装方法分享