您的位置:首页 > 其它

创建型设计模式-建造者模式

2017-03-02 17:25 337 查看
建造者模式:

将一个对象的构建和表示分离,使得同样的构建过程可以创建不同的表示

建造者模式参与角色:

抽象建造者builder:给出一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造

具体建造者:实现builder接口,构建和装配产品各个部件,定义并明确它所创建的表示,提供一个返回这个产品的接口

指挥者Director:构建一个使用builder接口的对象,负责管理整个产品的流程

产品角色Product:被构建的复杂对象,具体建造者创建该产品的内部表示并定义它的装配过程,它包含定义组成部件的类,包括这些部件装配成最终产品的接口

指挥者角色:Director

public class Director {
public void Build(AbstractBuilder builder){
builder.BuilderA();
builder.BuliderB();
}
}


产品角色:Product

public class Product {

List<String> list=new ArrayList<String>(); //产品的部件集合

/**
* 表示配件装配过程
* @param partName 产品部件名称
*/
public void add(String partName){
list.add(partName);
}

public void show() {
for(String str:list){
System.out.println(str);
}
}
}


抽象建造者:AbstractBuilder

public abstract class AbstractBuilder {

//构建部件B
public abstract void BuilderA();

//构建部件A
public abstract void BuliderB();

//取出产品
public abstract Product getProduct();
}


具体建造者角色:

public class ConcreteBuilderA extends AbstractBuilder {

private Product product = new Product();  //构建的目标对象

@Override
public void BuilderA() {
product.add("A建造者正在组装产品A部件.....");
}

@Override
public void BuliderB() {
product.add("A建造者正在组装产品B部件.....");

}

@Override
public Product getProduct() {  //提供返回构建的目标对象的方法
return product;
}
}


public class ConcreteBuilderB extends AbstractBuilder {

private Product product=new Product();

@Override
public void BuilderA() {
product.add("B建造者正在组装产品A部件.....");
}

@Override
public void BuliderB() {
product.add("B建造者正在组装产品B部件.....");
}

@Override
public Product getProduct() {
return product;
}
}


测试代码:

Director director = new Director();  //指挥者:负责产品部件的整个生产流程

//调用A建造者生产产品
AbstractBuilder builder = new ConcreteBuilderA();
director.Build(builder);  //制定负责整个产品生产的建造者

Product product=builder.getProduct(); //获取建造者生产的产品
product.show();

System.out.println("-------------------");
//调用B建造者生产产品
builder = new ConcreteBuilderB();
director.Build(builder);
product = builder.getProduct();
product.show();


结果:



通俗解释:

汽车厂(指挥者)准备生产某型汽车,然后将零部件变速箱(产品)下单给汽车零部件供应商A/B(建造者),然后汽车零部件供应商A/B按照汽车厂的规范组装胜场生产变速箱,最后生产的产品交给汽车厂使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息