建造模式是对象的创建模式。
建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
建造者(Bulider):给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的建造方法和结果返回方法。
具体建造者(ConcreteBuilder):担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下创建产品的实例。这个角色要完成的任务包括:
1.实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作。
2.在建造过程完成后,提供产品的实例。
导演者(Director):担任这个角色的类调用具体建造者以创建产品对象。应当指出的是,导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。
产品:产品(Product)是建造中的复杂对象。一般来说,一个系统中会有>=1个产品类,而且这些产品类并不一定有共同的接口,而且完全是不相关联的。
package org.liujia.basic.designpatterns.anotherbuilder;
public class Director {
private Builder builder;
public void construct(){
builder = new ConcreteBuilder();
//建造零件
builder.buildPart1();
builder.buildPart2();
//获得产品
Product product = builder.retrieveResult();
}
}
package org.liujia.basic.designpatterns.anotherbuilder;
public abstract class Builder {
/**建造第一部分
*
*/
public abstract void buildPart1();
/**建造第二部分
*
*/
public abstract void buildPart2();
/**返回结果对象
*
*/
public abstract Product retrieveResult();
}
package org.liujia.basic.designpatterns.anotherbuilder;
public class ConcreteBuilder extends Builder{
private Product product = new Product();
@Override
public void buildPart1() {
// 建造第一部分 如:product.name=xxxxxx;
}
@Override
public void buildPart2() {
// 建造第二部分
}
@Override
public Product retrieveResult() {
return product;
}
}
package org.liujia.basic.designpatterns.anotherbuilder;
public class Product {
//Product的一些属性
}
如果有多个产品类的话,就多写几个ConcreteBuilder ,每个ConcreterBuilder生成对应的产品。
每个产品类都实现一个共同的抽象接口(Product),这样retrieveProduct的返回值都可以写成Product,但是却能获得不同的产品。
简化后:
简化后Director和抽象的Builder被省略掉。
package org.liujia.basic.designpatterns.builder.simplifiedeidtion;
public class Client {
private static Builder builder ;
public static void main(String[] args) {
builder = new Builder() ;
builder.construct();
Product product = builder.retrieveResult();
}
}
package org.liujia.basic.designpatterns.builder.simplifiedeidtion;
public class Builder {
private Product product = new Product() ;
public void buildPart1(){
}
public void buildPart2(){
}
public Product retrieveResult(){
return product;
}
public void construct(){
buildPart1();
buildPart2();
}
}
package org.liujia.basic.designpatterns.builder.simplifiedeidtion;
public class Product {
}
仅作为笔记,并给不懂的人做个参考。牛B的人就不要看了。