您的位置:首页 > 其它

浅谈设计模式之建造者模式

2016-05-23 12:16 127 查看
建造者模式(Prototype):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。用户只需要指定需要创建的类型就可以得到产品,而不需要知道具体的构建过程。

建造者模式属于创建型的设计模式,生活中的很多例子都可以引用这种设计模式,比如我们去吃饭的时候点了一份套餐(产品),那么收银员(导演)就会通知厨师(建造者)按照这份套餐的各个部分组合做完之后让服务员端给用户。

UML图如下:



//需要建造的产品类
class Product
{
//部件列表
List<String> mPartList=new List<String>();
public void Add(String part)
{
mPartList.add(part);
}
public void Show()
{
foreach (string p in mPartList)
Print(p);
}
}

//抽象建造者
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetProduct();
}
//具体建造者类
class ConcreteBuilder : Builder
{
Product mProduct=new Product();

public void BuildPartA() {
mProduct.Add("ConcreteBuilderA.buildPartA");
}
public void BuildPartB() {
mProduct.Add("ConcreteBuilderA.buildPartB");
}
public Product GetProduct() {
return mProduct;
}
}

//指挥者类
class Director
{
//用来指挥建造过程
public void Construct(Builder builder){
builder.BuildPartA();
builder.BuildPartB();
}
}

//测试
static void Main((string[] args)
{
//创建过程
Builder builder = new ConcreteBuilder();
Director director = Director();
director.Construct(builder);
//创建完成后的产品
Product p = builder.GetResult();
p.Show();
Console.Read();
}


建造者模式主要适用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象的内部构建通常面对着复杂的变化。所以当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时,或者当构造过程必须允许被构造的对象有不同的表示时就应该考虑使用建造者模式了。

建造者模式的好处在于建造代码和表示代码分离了,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

从图中可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单的工厂模式了。一般来说,如果产品的建造不复杂,那么请用工厂模式;如果产品的建造很复杂,那么请用建造者模式。

参考书籍:《大话设计模式》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式