案例: 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死采购员了,这里就可以采用建造者模式来解决这个问题,我们可以把电脑的各个组件的组装过程封装到一个建造者类对象里,建造者只要负责返还给客户端全部组件都建造完毕的产品对象就可以了。然而现实生活中也是如此的,如果公司要采购一批电脑,此时采购员不可能自己去买各个组件并把它们组织起来,此时采购员只需要像电脑城的老板说自己要采购什么样的电脑就可以了,电脑城老板自然会把组装好的电脑送到公司。下面就以这个例子来展开建造者模式的介绍。
第一步 创建我们生产对象体
public class Computer{ ///收集所有的具体生产属性 private LIstlist=new List (); public void Add(string str) { Aist.add(str); } ///开始生产 public void Production(){ foreach(var s in list){ Console.WriteLine("组件"+part+"已装好"); } }}
第二步 创建一个抽象的创建者
public abstract class Builder{ public void abstract Cpu(); public void abstract Mouse(); public abstract Computer GetComputer(); }
第三步 实现创造者功能
///不同的创造者可以生产不同的电脑 public class ComputerOneBuilder: Builder{ Computer com=new Computer(); public void override Cpu(){ com.Add("cpu搞好了i7"); } public void override Mouse(){ com.Add("鼠标生产号了"); } public override Computer GetComputer(){ return com; } } public class ComputerTwoBuilder: Builder{ Computer com=new Computer(); public void override Cpu(){ com.Add("cpu搞好了i5"); } public void override Mouse(){ com.Add("鼠标生产号了"); } public override Computer GetComputer(){ return com; } }
第三步 创建一个指挥者
public class Director{ public Command(Builder builder) { //指挥生产者生产CPU builder.Cpu(); //指挥生产者生产 Mouse builder.Mouse(); } }
第4步消费者购买电脑
class Customer { static void Main(string[] args){ ///找到指挥者 Director d=new Director(); ///告诉指挥者我要的电脑 ComputerOneBuilder one =new ComputerOneBuilder(); ///指挥者开始交生产者开始生产 d.Command(one); //生产完成 one.GetComputer().Production(); ComputerTwoBuilder Two =new ComputerTwoBuilder(); ///指挥者开始交生产者开始生产 d.Command(Two); //生产完成 Two.GetComputer().Production(); }}