前言

写给自己-贵在坚持。建造者模式不复杂,但是想个形象的例子好难。

介绍-建造者模式

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实现

建造者模式主要是应对复杂对象,在之前讲的滑板鞋的例子看上去不是很适合,因为它并不复杂。但是我们把一双鞋子拆分一下:鞋底、鞋带、鞋面 等等。原来它也并不简单,下面通过建造者模式来实现一下造鞋子的流程:

首先是建造者类:

    /// <summary>/// 建造者基类/// </summary>public abstract class Builder{/// <summary>/// 组装鞋底/// </summary>public abstract void BuildTread();/// <summary>/// 组装鞋面/// </summary>public abstract void BuildVamp();/// <summary>/// 穿鞋带/// </summary>public abstract void BuildShoeLace();/// <summary>/// 鞋子出厂/// </summary>/// <returns></returns>public abstract Shoes OutShoes();}

工厂里谁是建造者,当然是工人:

  /// <summary>/// 操作员1/// </summary>public class Operator1 : Builder{Shoes shoes = new Shoes();public override void BuildShoeLace(){shoes.AddPart("鞋带1");}public override void BuildTread(){shoes.AddPart("鞋底1");}public override void BuildVamp(){shoes.AddPart("鞋面1");}public override Shoes OutShoes(){return shoes;}}/// <summary>/// 操作员2/// </summary>public class Operator2 : Builder{Shoes shoes = new Shoes();public override void BuildShoeLace(){shoes.AddPart("鞋带2");}public override void BuildTread(){shoes.AddPart("鞋底2");}public override void BuildVamp(){shoes.AddPart("鞋面2");}public override Shoes OutShoes(){return shoes;}}

还是产品-鞋子:

  /// <summary>/// 鞋子/// </summary>public class Shoes{public Shoes(){Parts = new List<string>();}List<string> Parts { get; set; }public void AddPart(string part){Parts.Add(part);}public void ShowParts(){for(int i =0,c = Parts.Count;i < c; i++){Console.WriteLine("我的滑板鞋建造的顺序是_{0}:{1}",i,Parts[i]);}}}

假如是你工人的话,你会自觉的干活吗?(我不会,嘿嘿...所以需要老板来指挥):

   public class Boss{public Shoes BuidShoes(Builder builder){builder.BuildTread();builder.BuildVamp();builder.BuildShoeLace();return builder.OutShoes();}}

下面看调用:

namespace DesignPattern
{class Program{static void Main(string[] args){Boss boss = new Boss();Builder builder1 = new Operator1();Shoes shoes1 = boss.BuidShoes(builder1);shoes1.ShowParts();Console.WriteLine("-----------------华丽的分割线-----------------");Builder builder2 = new Operator2();Shoes shoes2 = boss.BuidShoes(builder2);shoes2.ShowParts();Console.Read();}}
}

运行结果:

欢迎批评指正,转载请注明出处 http://www.cnblogs.com/xinwang/p/6380564.html

转载于:https://www.cnblogs.com/xinwang/p/6380564.html

C# 设计模式巩固笔记 - 建造者模式相关推荐

  1. 设计模式之笔记--建造者模式(Builder)

    建造者模式(Builder) 定义 建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类图 描述 Builder:定义一个建造者抽象类,以规范产 ...

  2. 设计模式学习笔记——建造者(Builder)模式

    设计模式学习笔记--建造者(Builder)模式 @(设计模式)[设计模式, 建造者模式, builder] 设计模式学习笔记建造者Builder模式 基本介绍 建造者案例 类图 实现代码 Build ...

  3. 设计模式之路 | 建造者模式

    模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...

  4. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

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

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

  6. 《大话设计模式》读书笔记-建造者模式

    // 建造者类     class PersonDirector     {         private PersonBuilder pb; public PersonDirector(Perso ...

  7. 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)

    建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...

  8. Java 设计模式情景分析——建造者模式

    当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...

  9. 设计模式二:建造者模式

    建造者模式 想要创建一个由多个部分构成的对象,而且他的构成需要一步接一步地完成.只有当各个部分都创建好,这个对象才是完整的.这时就需要建造者模式 建造者设计模式:将一个复杂对象的构造过程与其表现分离, ...

  10. Java设计模式10,建造者模式

    目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...

最新文章

  1. Python实训day04pm【网络爬虫(文本、图片)】
  2. 组合部分标签向量并累加成完整向量
  3. Python中类、对象与self详解
  4. MongoDB数据库操作---终端操作
  5. A股开盘:深证区块链50指数跌0.30%,近150只概念股下跌
  6. XManager 远程访问 Ubuntu16.04 图形界面
  7. 安笙机器人_张翰新戏搭档徐璐!包贝尔要和辛芷蕾演奇幻电影?
  8. 计算机组成原理:最详细笔记
  9. 机器视觉算法(数据结构)
  10. lisp医院化验系统_医院LIS系统解决方案
  11. VSCode 摸鱼神器
  12. Socket长连接和短连接的区别
  13. 利用IE的追踪保护加载项,给IE增加去广告功能
  14. 人工智能学习-高等数学
  15. 深度:融360还是一家有价值的公司吗?
  16. 【微信小程序】微信小程序生成二维码报错errcode=41030,invalid page rid
  17. axure rp pro 9.0授权密钥
  18. 新手学Python之学习官网教程(五: Data Structures)
  19. 【模电】第十章、信号处理与信号产生电路(振荡电路)
  20. 华为云计算IE面试笔记-FusionSphere Openstack规划设计过程中要考虑哪些网络平面,各平面主要走哪些业务?

热门文章

  1. 重载 重载递增递和减运算符
  2. 使用RecyclerView替代ListView(一)
  3. MongoDB 复制集(Replica Set) 配置(Windows 版)
  4. Python 一个无限 重复生成器的实现 和一个简洁的 quicksort
  5. [readable]轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI)
  6. 新来的妹纸问我,如果把几百万数据放入内存,会不会把系统撑爆?
  7. 北京44岁程序员失业,感叹:编程估计没戏了,想去卖煎饼果子点背锅走人~
  8. 牛逼!这么问 OutOfMemoryError 能让我懵逼!
  9. 看完这篇还不了解Nginx,你来找我!
  10. Codeforces Round #565 (div. 3)