您的位置:首页 > 编程语言 > Java开发

Java设计模式——建造者模式

2018-02-06 17:15 176 查看

概述

建造者(Builder)模式,又称为生成器模式。它是将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。当采用了建造者模式,用户就只需要指定需要建造的类型就可以得到想要的最终结果,至于具体的构建过程和构建细节不需要过多知晓。

UML



Director:指挥者,主要负责调度Builder接口对象,构建成型的产品。

Builder:抽象接口,封装了Product各个部件的生产方法和工序。

ConcreteBuilder:具体的构建者,它实现了Builder接口,执行具体的构建过程。

Product:具体的产品类。

代码举例

/**
* 角色:Product
* 产品类
*/
public class Product {
ArrayList<String> parts = new ArrayList<>();

public void add(String part) {
parts.add(part);
}

public void show() {
for (String part : parts) {
System.out.println(part);
}
}
}


/**
* 角色:Builder
* 建造者基类
*/

public interface Builder {
void buildPartA();

void buildPartB();

void buildPartC();

Product getFinalProduct();
}


/**
* 角色:ConcreteBuilder
* 具体的建造者
*/
public class ConcreteBuilderA implements Builder {
private Product product;

public ConcreteBuilderA() {
product = new Product();
}

@Override
public void buildPartA() {
product.add("part a");
}

@Override
public void buildPartB() {
product.add("part b");
}

@Override
public void buildPartC() {
product.add("part c");
}

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


/**
* 角色:ConcreteBuilder
* 具体的建造者
*/
public class ConcreteBuilderB implements Builder {
private Product product;

public ConcreteBuilderB() {
product = new Product();
}

@Override
public void buildPartA() {
product.add("part x");
}

@Override
public void buildPartB() {
product.add("part y");
}

@Override
public void buildPartC() {
product.add("part z");
}

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


/**
* 角色:ConcreteBuilder
* 具体的建造者
*/
public class ConcreteBuilderC implements Builder {
private Product product;

public ConcreteBuilderC() {
product = new Product();
}

@Override
public void buildPartA() {
product.add("part one");
}

@Override
public void buildPartB() {
product.add("part two");
}

@Override
public void buildPartC() {
product.add("part three");
}

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


/**
* 角色:Director
* 指挥者
*/
public class Director {
public void Construct(Builder builder) {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}


public class Main {
public static void main(String[] args) {
Director director = new Director();
Builder builderA = new ConcreteBuilderA();
Builder builderB = new ConcreteBuilderB();
Builder builderC = new ConcreteBuilderC();

director.Construct(builderA);
director.Construct(builderB);
director.Construct(builderC);

Product productA = builderA.getFinalProduct();
Product productB = builderB.getFinalProduct();
Product productC = builderC.getFinalProduct();

productA.show();
productB.show();
productC.show();

}
}


总结

建造者的思维模式是将构建的方法和具体的构建操作分离,Builder类提供具体的构建方法,Director类来负责调度和下达构建指令。这样的话,可以将产品的结构和产品的零件的建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: