生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
UML类图:
构成:
1.Builder(接口/抽象类)定义了创建一个产品Product的各个部件的方法,返回创建好的产品。
2.Director 调用Builder创建部件的方法,对产品的创建进行控制
3.ConcreteBuilder 实现/重写 Builder的方法,负责创建Product各个部件
4.Product 被创建的对象
以手机为例,在这里Builder使用抽象类提供了,提供了空的方法作为默认的部件创建方法和创建、返回产品两个方法,也可以定义为接口让具体类去实现
abstract
class
Builder
{
public Phone phone { get; privateset; }
virtualpublicvoid createPhone() { phone = new Phone(); }
virtualpublicvoid addCPU() { }
virtualpublicvoid addMemory() { }
virtualpublicvoid addScreen() { }
virtualpublic Phone getPhone()
{
return phone;
}
}
一个生成苹果手机的ConcreteBuilder
class
AppleBuilder : Builder
{
override
public
void
addCPU()
{
phone.CPU = "A7";
}
overridepublicvoid addMemory()
{
phone.Memory = "1GB";
}
overridepublicvoid addScreen()
{
phone.Screen = "LG 5.5"";
}
}
Director负责调用Builder
class
Director
{
public
void
createPhone(Builder builder)
{
builder.createPhone();
builder.addCPU();
builder.addMemory();
builder.addScreen();
}
}
要生成的产品Phone
class
Phone
{
public
string
CPU;
public
string
Memory;
public
string
Screen;
public
override
string
ToString()
{
return
"
CPU:
"+CPU+"nMemory:"+Memory+"nScreen:"+Screen;
}
}
执行代码
效果:
1.变更产品,只需定义一个新的ConcreteBuilder
2.Director对产品的构造过程可以精细控制(每个部件创建的先后顺序?还有什么?)
原文:http://www.cnblogs.com/castdream/p/4815364.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!