CSharp设计模式读书笔记(6):建造者模式(学习难度:★★★★☆,使用频率:★★☆☆☆)
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
模式角色与模式:

建造者模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以是一个建造过程生成具有不同的内部表象的产品对象。
示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace CSharp.DesignPattern.BuilderPattern
{
class Program
{
static void Main(string[] args)
{
Director director = new Director(); IBuilder b1 = new ConcreteBuilder1();
IBuilder b2 = new ConcreteBuilder2(); Product p1;
Product p2; director.Construct(b1);
p1 = b1.GetResult(); director.Construct(b2);
p2 = b2.GetResult(); p1.Display();
p2.Display(); Console.ReadLine();
}
} // 指挥者
class Director
{
public void Construct(IBuilder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
} // 抽象建造者
interface IBuilder
{
void BuildPartA();
void BuildPartB();
Product GetResult();
} // 具体建造者
class ConcreteBuilder1 : IBuilder
{
private Product product; public void BuildPartA()
{
product = new Product();
product.Add("PartA");
} public void BuildPartB()
{
product.Add("PartB");
} public Product GetResult()
{
return product;
}
} // 具体建造者
class ConcreteBuilder2 : IBuilder
{
private Product product; public void BuildPartA()
{
product = new Product();
product.Add("PartX");
} public void BuildPartB()
{
product.Add("PartY");
} public Product GetResult()
{
return product;
}
} class Product
{
List<String> parts = new List<String>(); public void Add(String part)
{
parts.Add(part);
} public void Display()
{
Console.WriteLine("Display result:");
foreach (String obj in parts)
{
Console.WriteLine(obj);
}
}
}
}
CSharp设计模式读书笔记(6):建造者模式(学习难度:★★★★☆,使用频率:★★☆☆☆)的更多相关文章
- Head First 设计模式读书笔记(1)-策略模式
一.策略模式的定义 策略模式定义了算法族,分别封装起来,让它们之间可以互换替换,此模式让算法的变化独立使用算法的客户. 二.使用策略模式的一个例子 2.1引出问题 某公司做了一套模拟鸭子的游戏:该游戏 ...
- CSharp设计模式读书笔记(24):访问者模式(学习难度:★★★★☆,使用频率:★☆☆☆☆)
模式角色与结构: 示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- CSharp设计模式读书笔记(23):模板方法模式(学习难度:★★☆☆☆,使用频率:★★★☆☆)
模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模式角色与结构: 实现代码: using System; ...
- CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)
策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 模式角色与结构: ...
- CSharp设计模式读书笔记(21):状态模式(学习难度:★★★☆☆,使用频率:★★★☆☆)
模式角色与结构: 示例代码:(本示例在具体状态类中实现状态切换,也可以在环境类中实现状态切换.状态模式一定程度上违背开闭原则) using System; using System.Collectio ...
- CSharp设计模式读书笔记(18):中介者模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)
中介者模式(Mediator Pattern):用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互,中介者模式又称为 ...
- CSharp设计模式读书笔记(17):迭代器模式(学习难度:★★★☆☆,使用频率:★★★★★)
迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor). 模式角色与结构: 实现代码: using System; us ...
- CSharp设计模式读书笔记(15):命令模式(学习难度:★★★☆☆,使用频率:★★★★☆)
命令模式(Command Pattern):将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及支持可撤销的操作.命令模式是一种对象行为型模式,其别名为 ...
- CSharp设计模式读书笔记(14):职责链模式(学习难度:★★★☆☆,使用频率:★★☆☆☆)
职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象 ...
随机推荐
- Visual Studio 使用及调试必知必会
原文:Visual Studio 使用及调试必知必会 一:C# CODING 技巧 1:TODO 然后 CTRL + W + T,打开任务列表,选中 Comments,就会显示所有待做的任务 2: ...
- charles抓包
charles使用教程指南 charles使用教程指南 前言 移动APP抓包 PC端抓包 查看模式 其他功能 问题汇总 1. 前言: Charles是一款抓包修改工具,相比起burp,charles具 ...
- Swift继承
//声明一个基类 class vehicle { var maxPassenger : Int = 0 var manufacturer : String! func description() -& ...
- poj2096--Collecting Bugs(可能性dp第二弹,需求预期)
Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions: 2678 Accepted: 1302 ...
- inner join on, left join on, right join on
1.定义: inner join(等值连接) : 仅仅返回两个表中联结字段相等的记录 left join(左联接) :返回包含左表中的全部记录和右表中联结字段相等的记录 right join(右联接) ...
- 提升Mac os x 10.10+xcode6.1之后,Cocoapods发生故障的解决方案
提升Mac OS X 10.10+Xcode 6.1之后.Cocoapods图书馆管理也依赖于相应升级.现在最新的Release版本号是 0.34.在之前的版本号.当数据库更新和管理,你会遇到一个错误 ...
- HTML5 transform三维立方体(随着旋转的效果)
为了得到更好的把握transform精华.因此,我们决定完成三维立方体模型,可以实现360无死三维旋转作用. 但旋转更难推断每侧视图的序列.然而,完美的解决方案,我希望有人能回答. 源代码直接贡献的朋 ...
- NSIS:禁止多次安装实例
原文 NSIS:禁止多次安装实例 为了防止用户重复安装软件,我们可以加入以下的判断来进行限制. 第一步:在安装脚本中,将是否已安装的标记Installed写入注册表中: 1 Section -Post ...
- mybatis generator插件开发
mybatis现在普遍使用的每一个人DAO框架.mybatis generator它可以基于数据库中的表结构,生成自己主动mybatis代码和配置文件,方便使用,当然,实际的使用过程中.generat ...
- Eclipse 发布到网站的附加产品的形式 Update Site
Eclipse 发布到网站的附加产品的形式 Update Site 通过Update Site Project项目将自己做的插件产品公布到公网上,给客户或其它測试人员下载和应用,这样自己的插件就以网站 ...