设计模式学习笔记四(Builder生成器模式)
来源:互联网 发布:网络剧 受众群体 编辑:程序博客网 时间:2024/05/18 02:03
动机:在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临剧烈的变化,但是将它们组合在一起的算法却相对稳定。
如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求的改变而改变。
意图:就是将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
基本Code:
//房子
public abstract class House
{
}
//门
public abstract class Door
{
}
//墙
public abstract class Wall
{
}
//窗口
public abstract class Windows
{
}
//地板
public abstract class Floor
{
}
//屋顶
public abstract class HouseCeiling
{
}
//罗曼蒂克的房屋
public class RomanDoor:Door
{
}
public class RomanWall:Wall
{
}
public class RomanWindows:Windows
{
}
public class RomanFloor:Floor
{
}
public class RomanHouseCeiling:HouseCeiling
{
}
//建造者模式
public abstract class Builder
{
public abstract void BuildDoor();
public abstract void BuildWall();
public abstract void BuildWindows();
public abstract void BuildFloor();
public abstract void BuilderHouseCeiling();
public abstract House GetHouse();
}
//罗曼蒂克房子
public class RomanHouse:House
{
}
public class RomanHouseBuilder:Builder
{
public override void BuildDoor(){}
public override void BuildWall(){}
public override void BuildWindows(){}
public override void BuildFloor(){}
public override void BuilderHouseCeiling(){}
public override House GetHouse(){}
}
public class GameManager
{
public static House CreateHouse(Builder builder)
{
builder. BuildDoor();
builder. BuildDoor();
builder.BuildWall();
builder.BuildWall();
builder.BuildWindows();
builder.BuildWindows();
builder.BuildFloor();
builder.BuilderHouseCeiling();
builder.GetHouse();
}
}
客户端程序:
public class App
{
public static void Main()
{
/*由于改变了参数我们要修改客户端code,所以我们可以从配置文件中读取//Builder信息,这样的话,我们客户端的Code就不需要做作任何改动*/
String assemblyName=ConfigurationManager.AppSettings["BuilderAssembly"];
String builderName=ConfigurationManager.AppSettings["BuilderName"];
Assembly assembly=Assembly.Load(assemblyName);
Type t=assembly.GetType(builderName);
Builder builder=Activator.CreateInstance(t);
//House house=GameManager.CreateHouse(new RomanBuilder());
House house=GameManager.CreateHouse(builder);
}
}
如果今后修改出现新的房子模式,我们只需要从Builder和House继承产生新的类就可以了,无需改动客户端的Code。
Builder模式的要点
1、 Builder模式主要用于“分布骤构建一个复杂的对象”。这其中的“分步骤”是一个稳定的算法,而复杂对象各个部分经常变化。
2、 变化点在那里,封装那里――Builder主要在于就对“复杂对象”各个部分的频繁需求变动。其缺点难以应对“分步骤构建算法”的变动。
3、 Abstract Factory模式解决“系列对象”的需求变化,Builder模式解决“对象部分”的需求变化。Builder模式经常和Composite模式组合使用。
- 设计模式学习笔记四(Builder生成器模式)
- 设计模式学习笔记(四)——Builder生成器模式
- C# 设计模式学习四 Builder生成器模式
- 设计模式学习-Builder(生成器
- 设计模式学习--生成器BUILDER
- Builder生成器(创建型设计模式)面向对象设计模式纵横谈讲座笔记之四
- 生成器(Builder)设计模式
- 设计模式---生成器(Builder)
- Builder设计模式(生成器设计模式)
- 设计模式随笔(四):生成器(Builder)
- 设计模式之--生成器(builder)模式(学习分析笔记)
- C#面向对象设计模式纵横谈 学习笔记4 Builder 生成器(创建型模式)
- C#面向对象设计模式纵横谈 学习笔记4 Builder 生成器(创建型模式)
- 设计模式----Builder(生成器)
- builder(生成器设计模式)
- 设计模式 - 生成器 Builder
- 设计模式->BUILDER(生成器)
- 设计模式之Builder(生成器模式)
- jbuilder2006 无法启动,flash window 一闪而过 解决方法!
- 一些值得IT人一看的人生感悟
- 北京印象和一些杂想
- 如何对把Jtable中某一行的列变成combobox形式
- Qt 被我搞短路了
- 设计模式学习笔记四(Builder生成器模式)
- 用Python快速编写网站遍历程序
- 用js脚本如何动态添加带参数的事件
- XHTML DHTML SHTML到底是什么,有何区别?
- 日志处理
- 搬家了
- Vega Prime 桌面教程(五)
- 用 qt opensource 版本 追加编译 oracle 的 oci 驱动
- 设计模式学习笔记五(Factory Method 工厂方法模式)