来说说<Builder>创建模式
来源:互联网 发布:数据的离散程度教案 编辑:程序博客网 时间:2024/06/09 11:56
1.什么是创建者模式?在什么时候使用?
当我们要创建一个复杂的系统,并且这种系统由着特定的复杂的步骤组合而成,我们要怎么办?就像老板要你去采购一批电脑,电脑的配置各有所不同,品牌也不同,而电脑由不同的部件组成,主板,内存,显示器,机箱等组成,而你不肯能一个一个零件的去采购,然后在来组装,这时候,我们就需要去找电脑城的老板,去找不同品牌的老板,让老板来给你组装好成品的电脑,你只需要付钱就可以拿到不同的电脑,这就是一个常见的创建者模式,老板就充当了Builder,从每个老板那儿拿到不同的配置,不同品牌的电脑。好,我们来实现这个简单的模式?
2.我们来实现这个系统
我们来实现电脑Class - Computer
/// <summary>/// 创建者模式/// </summary>public class Computer{private IList<string> parts = new List<string>();//把单个组件添加到电脑组合中public void Add(string part){parts.Add (part);}public void Show(){Debug.Log ("电脑开始组装");foreach(string patrs in parts){Debug.Log ("组件名称:" + parts +"已经组装好");}Debug.Log (" 电脑组装结束");}}我们来实现一个抽象的接口class-Builder
/// <summary>/// 电脑的组装着/// </summary>public abstract class Builder{//装CPUpublic abstract void BuilderPartCPU ();//装主板public abstract void BuildMainBoard();//获得组装好的电脑public abstract Computer getComputer();}我们在来实现两个创建者 class - ConcreateBuilder1
/// <summary>/// 具体的创建者/// </summary>public class ConcreateBuilder1 : Builder{Computer computer = new Computer();public override void BuilderPartCPU(){computer.Add ("CPU1");}public override void BuildMainBoard(){computer.Add ("Main board1");}public override Computer getComputer (){return computer;}}/// <summary>/// 具体的创建者2/// </summary>public class ConcreateBuilder2 : Builder{Computer computer = new Computer();public override void BuilderPartCPU(){computer.Add ("CPU2");}public override void BuildMainBoard(){computer.Add ("Main board2");}public override Computer getComputer (){return computer;}}
我们来实现一个导演类,也就是古代打仗的时候的将军,他负责指挥整个战斗的进行。
public class Director{public void Construct(Builder builder){builder.BuilderPartCPU ();builder.BuildMainBoard ();}}
我们来测试
public class Customer{public void MainTest(){Builder builder1 = new ConcreateBuilder1 ();Builder builder2 = new ConcreateBuilder2 ();Director direct = new Director ();//老板让第一个人去组装电脑direct.Construct (builder1);Computer comp1 = builder1.getComputer ();comp1.Show ();//老板让第二个人去组装电脑direct.Construct(builder2);Computer comp2 = builder2.getComputer ();comp2.Show ();}}
3。我们来说说他的特点。
(1)指挥者直接与客户打交道,而客户也丝毫不用关系产品的构造过程,指挥者把客户的请求委托给每一个创建者。
(2)建造者模式主要用于“分步骤来构建一个复杂的对象”,其中“分步骤”是一个固定的组合过程,而复杂对象的各个部分是经常变化的(也就是说电脑的内部组件是经常变化的,这里指的的变化如硬盘的大小变了,CPU由单核变双核等
(3)产品不需要抽象类,由于建造模式的创建出来的最终产品可能差异很大,所以不大可能提炼出一个抽象产品类
(4)在前面文章中介绍的抽象工厂模式解决了“系列产品”的需求变化,而建造者模式解决的是 “产品部分” 的需要变化
(5 由于建造者隐藏了具体产品的组装过程,所以要改变一个产品的内部表示,只需要再实现一个具体的建造者就可以了,从而能很好地应对产品组成组件的需求变化。
阅读全文
0 0
- 来说说<Builder>创建模式
- 来说说组件(Components)模式
- 来说说指令(Command)模式
- 来说说(Prototype)原型模式
- 来说说<Adpater>适配器模式
- 来说说(Composite)组合模式
- 来说说(Facade)外观模式
- 来说说(Proxy) 代理模式
- 来说说Unity观察者(Observer)模式
- 来说说SubClass沙盒模式
- 来说说(Memorandum)备忘录模式
- 来说说(Decorator)装饰者模式
- 来说说(Strategy)策略模式
- 来说说(AbstractFactory)静态工厂模式
- 来说说(Singleton)单例模式
- 来说说(SimpleFactory)简单工厂模式
- 来说说<Bridge>桥接模式
- 来说说(Iterator)迭代器模式
- 根据数组下标删除数组中的元素
- JVM<对象的四种引用>
- python3 Scrapy简介
- 回顾java
- 百度地图及定位
- 来说说<Builder>创建模式
- 《算法图解》书摘-算法介绍/选择排序
- java:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
- Eclipse如何安装testng
- 快乐数
- Flume HDFS sink 配置手册
- VC INI文件读写 和 GetProfileString,WriteProfileString函数的使用
- Java写支付功能-----小白可以参考阅读一下
- 《算法图解》书摘-递归/快速排序