前言

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

介绍-建造者模式

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

实现

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

首先是建造者类:

    /// <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 =,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

C# 设计模式巩固笔记 - 建造者模式的更多相关文章

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

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

  2. Java-马士兵设计模式学习笔记-建造者模式

    一.概述 二.代码 1.Animal.java public interface Animal { public void bark(); } 2.Dog.java public class Dog ...

  3. java23种设计模式——五、建造者模式

    源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...

  4. Java学习笔记——设计模式之九.建造者模式

     建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: package cn.happy.design_pattern._09b ...

  5. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  6. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  7. 设计模式学习之建造者模式(Builder,创建型模式)(6)

    假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子 第一步: 新建一个房子类House,里面有房子该有的属性,我们去找房子建造者接口HouseBuilder,我们要建 ...

  8. PHP设计模式之:建造者模式

    建造者模式: 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式; 目的: 消除其他对象复杂的创建过程 结构图: 优点: 建造者模式可以很好的将一个对象的实现与相关的“业 ...

  9. C#学习笔记-建造者模式

    题目:用程序画一个小人. 实现: public partial class Form1 : Form { public Form1() { InitializeComponent(); } priva ...

随机推荐

  1. Docker+.Net Core 的那些事儿-3.创建容器并运行

    1.根据镜像运行容器 上篇文章建立了一个镜像: 我们以此开始,执行以下命令: docker run -d -p 5000:5000 hwapp:latest 如果返回以上结果表示建立成功. 此时如果你 ...

  2. win10+eclipse+hadoop2.7.2+maven+local模式直接通过Run as Java Application运行wordcount

    一.准备工作 (1)Hadoop2.7.2 在linux部署完毕,成功启动dfs和yarn,通过jps查看,进程都存在 (2)安装maven 二.最终效果 在windows系统中,直接通过Run as ...

  3. JMeter插件管理器

    JMeter插件管理器 来自官网:https://jmeter-plugins.org/wiki/PluginsManager/ JMeter插件管理器的想法很简单:不是手动安装各种插件,而是通过漂亮 ...

  4. Linux数据备份与恢复

    Linux数据备份及服务器重要数据类别分析 对 Linux 服务器来讲,当然最理想的就是把整块硬盘中的数据都备份,甚至连分区和文件系统都备份,这样如果硬盘损坏,那么我们可以直接把备份硬盘中的数据导入损 ...

  5. HCNP学习笔记之PXE原理详解及实践

    一.PXE简介 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 ...

  6. ElasticSearch(三) ElasticSearch中文分词插件IK的安装

    正因为Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,所以我们需要借助中文分词插件来解决这个问题. 一.安装maven管理工具 Elasticsearch 要使 ...

  7. LeetCode (236):Lowest Common Ancestor of a Binary Search Tree

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  8. [翻译]小提示:使用figure和figcaption元素的正确方式

    figure和figcaption是一对经常被一起使用的语义化标签.如果你还没有看过规范中的定义,现在有机会在你的项目中使用它们了.如果你不知道怎么用,下面是关于如何正确使用它们的一些提示. figu ...

  9. 爬虫框架Scrapy之Item Pipeline

    Item Pipeline 当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item. 每个Item Pipeline ...

  10. No module named _sqlite3 django python manage.py runserver

    linux 执行django(python manage.py runserver),报错No module named _sqlite3,需要安装sqlite-devel,再重新编译安装python ...