设计模式之建造者模式
来源:互联网 发布:足彩自动推荐软件 编辑:程序博客网 时间:2024/05/28 01:35
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(可以规范建造流程,防止出现错误)
例如:生产一种产品,该产品包含三个零件,有多种不同的生产方法,使用建造者模式实现该产品的生产。
(1)创建产品类
/// <summary>
/// 产品
/// </summary>
public class Product
{
//部件A
public string PartA { get; set; }
//部件B
public string PartB { get; set; }
//部件C
public string PartC { get; set; }
}
(2)创建抽象构建者类,以规范生产过程,防止出现错误
/// <summary>
/// 构建着抽象类
/// </summary>
public abstract class Builder
{
protected Product _pro;
public Builder(Product pro)
{
_pro = pro;
}
//以下是生产产品的工作流程
public abstract void BuildA();
public abstract void BuildB();
public abstract void BuildC();
}
(3)创建具体的创建者类,以实现不同的生产方式
/// <summary>
/// 构架模式A
/// </summary>
public class BuilderA:Builder
{
public BuilderA(Product pro)
: base(pro)
{
}
public override void BuildA()
{
_pro.PartA = "精良的A部件";
}
public override void BuildB()
{
_pro.PartB = "精良的B部件";
}
public override void BuildC()
{
_pro.PartC = "精良的C部件";
}
}
/// <summary>
/// 构造模式B
/// </summary>
public class BuilderB:Builder
{
public BuilderB(Product pro)
: base(pro)
{
}
public override void BuildA()
{
_pro.PartA = "粗糙的A部件";
}
public override void BuildB()
{
_pro.PartB = "粗糙的B部件";
}
public override void BuildC()
{
_pro.PartC = "粗糙的C部件";
}
}
(4)创建指挥者类,已实现工作流程的规范,客户端无需知道具体的生产过程,实现封装
/// <summary>
/// 指挥生产零件的类
/// </summary>
public class Director
{
private Builder _builder;
public Director(Builder builder)
{
this._builder = builder;
}
public void CreateProduct()
{
_builder.BuildA();
_builder.BuildB();
_builder.BuildC();
}
}
(5)客户端生产零件
Product pro = new Product();
BuilderA builderA = new BuilderA(pro);
Director director = new Director(builderA);
director.CreateProduct();
Console.WriteLine("生产出来的部件,{0},{1},{2}",pro.PartA,pro.PartB,pro.PartC);
- 设计模式之建造者
- 设计模式 之 建造者
- 设计模式之建造者
- 设计模式之建造者模式
- 设计模式之建造者模式
- 五 设计模式之建造者模式
- 设计模式之建造者模式
- C# 设计模式之 建造者模式
- 【设计模式】之 Builder 建造者模式
- 设计模式之建造者模式学习
- 设计模式之建造者模式
- 设计模式笔记之---建造者模式
- 设计模式之建造者模式
- 设计模式之建造者模式
- 设计模式之建造者模式
- java设计模式之建造者模式
- 设计模式之建造者模式
- java设计模式之建造者模式
- CentOS 卸载OpenJdk
- IAR 显示编译信息
- HDU 4916 树形dp
- Problems occurred when invoking code from plug-in: "org.eclipse.core.resources"
- 配置linux java 环境
- 设计模式之建造者模式
- mysql中循环截取用户信息,插入到目标表中
- JSP里ContentType ,charset和pageEncoding的理解与区别
- iptables的详细介绍及配置方法
- memcached 常见问题 翻译
- hdoj.2093 考试排名 20140806
- 转载:需求入门: 需求工程=需求开发+需求管理
- SQL SERVER中判断某个字段是否包含大写字母
- GridView中如何取的当前选中行的所有值