标签:
建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
产品的内部表象
一个产品常有不同的组成成分作为产品的零件。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址得到赋值之前,这个电子邮件不能发出。还有一些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程是建造零件的过程。由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另外一个称做建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。
建造模式非常适合于此种情况。建造模式将产品结构和产品的零件建造过程对客户端隐藏起来,达到责任划分和封装的目的。
下面给出一个示意性的系统实现。该系统涉及到四个角色:
导演者角色是与客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再把这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但却不为客户端所知。
一下是系统源代码:
/*
* 导演者角色
* */
public class Director {
private Builder builder;
/*
* 产品的构建方法,负责调用各个零件的构建方法
* */
public void construct()
{
builder=new ConcreteBuilder();
builder.buildPart1();
builder.buildPart2();
builder.retrieveResult();
}
}
/*
* 抽象建造者角色
* */
public abstract class Builder {
/*
* 产品零件构建方法
* */
public abstract void buildPart1();
/*
* 产品零件构建方法
* */
public abstract void buildPart2();
/*
* 产品返还方法
* */
public abstract Product retrieveResult();
}
/*
* 具体建造者角色
* */
public class ConcreteBuilder extends Builder {
private Product product=new Product();
@Override
public void buildPart1() {
// TODO Auto-generated method stub
}
@Override
public void buildPart2() {
// TODO Auto-generated method stub
}
@Override
public Product retrieveResult() {
// TODO Auto-generated method stub
return product;
}
}
/*
* 产品角色
* */
public class Product {
}
这里仅仅给出的是一个示意性的系统实现,建造者模式的具体应用请参考另一篇文章
标签:
原文地址:http://www.cnblogs.com/xtsylc/p/4718624.html