设计模式(9)---建造者模式

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一、定义

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

解释:使用建造者模式,用户只需要指定需要构造的类型就可以得到它们,而具体建造的过程和细节就不需要知道。

二、UML类图

三、基本代码

classPRogram

{staticvoidMain(string[] args)

{

Director director=newDirector();

Builder builder1=newConcreteBuilder1();

director.Construct(builder1);

Product product=builder1.GetProduct();

product.Show();

Console.Read();

}

}classProduct

{

IList<string> parts =newList<string>();publicvoidAdd(stringpart)

{

parts.Add(part);

}publicvoidShow()

{

Console.WriteLine("\n product create");foreach(stringpartinparts)

{

Console.WriteLine(part);

}

}

}abstractclassBuilder

{publicabstractvoidBuildPartA();publicabstractvoidBuildPartB();publicabstractProduct GetProduct();

}classConcreteBuilder1 : Builder

{privateProduct product =newProduct();publicoverridevoidBuildPartA()

{

product.Add("part A");

}publicoverridevoidBuildPartB()

{

product.Add("part B");

}publicoverrideProduct GetProduct()

{returnproduct;

}

}classDirector

{publicvoidConstruct(Builder builder)

{

builder.BuildPartA();

builder.BuildPartB();

}

}

基本代码中:Director指挥者指挥建造者对产品进行创建。所有具体建造者都继承接口类builder,从而完成具体产品的创建。而在客户端代码中,首先实例化指挥者、具体建造者,指挥者指挥具体建造者对产品进行创建,从而完成生产产品的功能。

四、具体实例

具体需求:采购员(客户端)需要采购一批电脑,他会到电脑城找到老板(指挥者)说明要求,老板会安排人员按照客户的要求进行电脑组装。整个过程,采购员不会涉及到电脑组装的复杂工程中去,他只负责提需求,然后采购到电脑即可。

产品类电脑:

publicclassComputer

{privateIList<string> parts =newList<string>();publicvoidAdd(stringpart)

{

parts.Add(part);

}publicvoidShow()

{

Console.WriteLine("电脑开始组装.................");foreach(stringpartinparts)

{

Console.WriteLine("组件"+ part +"已装好");

}

Console.WriteLine("电脑组装好了");

}

}

抽象建造者:

publicabstractclassBuilder

{publicabstractvoidBuildPartCPU();publicabstractvoidBuildPartMainBoard();publicabstractComputer GetComputer();

}

具体的建造者:

publicclassConcreteBuilder1 : Builder

{

Computer computer=newComputer();publicoverridevoidBuildPartCPU()

{

computer.Add("CPU");

}publicoverridevoidBuildPartMainBoard()

{

computer.Add("main board");

}publicoverrideComputer GetComputer()

{returncomputer;

}

}

指挥者老板:

publicclassDirector

{publicvoidConstruct(Builder builder)

{

builder.BuildPartCPU();

builder.BuildPartMainBoard();

}

}

客户端:

Director director =newDirector();

Builder builder1=newConcreteBuilder1();

director.Construct(builder1);

Computer computer1=builder1.GetComputer();

computer1.Show();

五、简化示例:

在具体应用中,指挥者和抽象建造者可以省略一个或者都省略,本例中只有产品类和建造者:

产品类:

publicclassProduct

{privateIList<string> parts =newList<string>();publicvoidAdd(stringpart)

{

parts.Add(part);

}publicvoidShow()

{

Console.WriteLine("产品开始组装.................");foreach(stringpartinparts)

{

Console.WriteLine("组件"+ part +"已装好");

}

Console.WriteLine("产品组装好了");

}

}

View Code

建造者:

publicclassBuilder

{privateProduct product =newProduct();publicvoidBuildPartA()

{

product.Add("PartA");

}publicvoidBuildPartB()

{

product.Add("PartB");

}publicProduct GetProduct()

{returnproduct;

}publicvoidConstruct()

{

BuildPartA();

BuildPartB();

}

}

View Code

客户端:

builder =newBuilder();

builder.Construct();

Product product=builder.GetProduct();

product.Show();

六、总结

建造者模式实现步骤:1)编写产品类;2)编写抽象建造者类(可省略);3)编写具体的建造者;4)编写指挥者类指挥建造者如何组装产品;最后客户端调用即可。建造者模式通过将建造代码和表现代码相分离,来实现组装过程和具体部件解耦。并且对客户端隐藏了组装如何实现的内部细节,从而使客户端无需关心如何组装,只需要使用即可。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航