来说说<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  由于建造者隐藏了具体产品的组装过程,所以要改变一个产品的内部表示,只需要再实现一个具体的建造者就可以了,从而能很好地应对产品组成组件的需求变化