前言

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

介绍-建造者模式

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

实现

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

首先是建造者类:

    /// <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. CSS中定义a:link、a:visited、a:hover、a:active顺序

    a :link.a:hover.a:visited这几个元素,定义CSS时候的顺序不同,也会直接导致链接显示的效果不同. eg:让未访问链接颜色为red,活动链接为yellow,已访问链接为green ...

  2. AndroidManifest.xml中的注册组件

    界面跳转时Activity的识别方法有两种:第一种,通过name 第二种,通过<intent-filter> 通过配置文件中配置<intent-filter>来实现Activi ...

  3. 使用sql语句创建 表空间 和用户,以及如何彻底删除表空间和用户,使用命令导出和导出数据库

    创建表空间有很多种方式,在安装好oracle 11g 后在网站上 https://localhost:1158/em 手动创建也可以,但是没有sql直接生成方便,下面介绍下如何用sql语句直接生成表空 ...

  4. saltstack实现自动化扩容

    案例:当nginx的并发达到3000,并持续了一段时间时,通过自动化创建一台虚拟机,部署应用最后添加到集群提供服务: zabbix监控(nginx并发量)------->action------ ...

  5. Myeclipse中java项目转换为Web项目

    https://blog.csdn.net/u010097777/article/details/51281059 这两天工作安排做一个跳转页面,不过昨天发布自己的Tomact花了不少时间,给的项目添 ...

  6. mongodb 索引的创建

    mongodb 创建常用的创建索引的有 signle Field Indexes Compound multikey,创建索引就是按照索引字段把documnet 进行排序,索引只存储了document ...

  7. [ARC061E]すぬけ君の地下鉄旅行 / Snuke's Subway Trip

    题目大意:Snuke的城镇有地铁行驶,地铁线路图包括$N$个站点和$M$个地铁线.站点被从$1$到$N$的整数所标记,每条线路被一个公司所拥有,并且每个公司用彼此不同的整数来表示. 第$i$条线路($ ...

  8. [CF1051F]The Shortest Statement

    题目大意:给定一张$n$个点$m$条有权边的无向联通图,$q$次询问两点间的最短路 $n\le100000$,$m\le100000$,$1\le100000$,$m$-$n\le20$. 首先看到$ ...

  9. 如何确保C#的应用程序只被打开一次

    http://stackoverflow.com/questions/184084/how-to-force-c-sharp-net-app-to-run-only-one-instance-in-w ...

  10. Java虚拟机内存区域划分

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.以及创建和销毁的时间.有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结 ...