C# 设计模式巩固笔记 - 建造者模式
前言
写给自己-贵在坚持。建造者模式不复杂,但是想个形象的例子好难。
介绍-建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
实现
建造者模式主要是应对复杂对象,在之前讲的滑板鞋的例子看上去不是很适合,因为它并不复杂。但是我们把一双鞋子拆分一下:鞋底、鞋带、鞋面 等等。原来它也并不简单,下面通过建造者模式来实现一下造鞋子的流程:
首先是建造者类:
/// <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# 设计模式巩固笔记 - 建造者模式的更多相关文章
- 设计模式之笔记--建造者模式(Builder)
建造者模式(Builder) 定义 建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类图 描述 Builder:定义一个建造者抽象类,以规范产 ...
- Java-马士兵设计模式学习笔记-建造者模式
一.概述 二.代码 1.Animal.java public interface Animal { public void bark(); } 2.Dog.java public class Dog ...
- java23种设计模式——五、建造者模式
源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...
- Java学习笔记——设计模式之九.建造者模式
建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: package cn.happy.design_pattern._09b ...
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- 设计模式学习之建造者模式(Builder,创建型模式)(6)
假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子 第一步: 新建一个房子类House,里面有房子该有的属性,我们去找房子建造者接口HouseBuilder,我们要建 ...
- PHP设计模式之:建造者模式
建造者模式: 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式; 目的: 消除其他对象复杂的创建过程 结构图: 优点: 建造者模式可以很好的将一个对象的实现与相关的“业 ...
- C#学习笔记-建造者模式
题目:用程序画一个小人. 实现: public partial class Form1 : Form { public Form1() { InitializeComponent(); } priva ...
随机推荐
- [转]VMware-Transport(VMDB) error -44:Message.The VMware Authorization Service is not running解决方案
转自:http://blog.sina.com.cn/s/blog_70c9c4b40101i01v.html 1.VMware Workstation中新建的虚拟机在开机的时候出现这种错误:Tran ...
- Foundations of RESTful Architecture
Introduction The Representational State Transfer (REST) architectural style is not a technology you ...
- Java linkedList详细介绍及使用示例
①LinkedList简单介绍 是一个继承于AbstractSequentialList的双向链表.它可以被当成堆栈.队列或双端队列进行操作. 实现了List接口,能对它进行队列操作. 实现了Dequ ...
- win7 eclipse设置Courier New字体
win7系统 1.控制面板-->字体.找到Courier New 字体,右键->显示,这种字体就开始变亮了. 2.eclipse里设置: windows-->Preferences- ...
- 超级强大的vim配置(vimplus)--续集
An automatic configuration program for vim 安装(github地址:https://github.com/chxuan/vimplus.git, 欢迎star ...
- Java学习第四周学习笔记
20145307<Java程序设计>第4周学习总结 教材学习内容总结 继承与多态 继承 继承作为面向对象的第二大特征,基本上就是避免多个类间重复定义共同行为.即当多个类中存在相同属性和行为 ...
- Ignatius and the Princess III - 拆分数-动态规划(dp)
---恢复内容开始--- 2017-08-10 20:00:45 writer:pprp 拆分数: 把正整数n拆分成k个正整数之和的方案数: 问题转换:将1转化为2 1.把n表示成m个正整数之和的方案 ...
- spring boot 国际化MessageSource
转自:https://blog.csdn.net/flowingflying/article/details/76358970 spring中ResourceBundleMessageSource的配 ...
- 自定义ajax
// 动态添加script获取里面的数据,,可实现跨域,不跨的当然也可以 getFile:function(params){ try{ //创建script标签 var cbName=params.c ...
- shell脚本中case select 的使用
#!/bin/bash # case echo "1.Install PHP" echo "2.Install Mysql" echo "3.Inst ...