1、建造模式的定义
建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
2、建造这模式的使用场景:
(1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
(2)当构造过程必须允许被构造的对象有不同表示时。
3、建造者模式的角色组成:
(1)builder:为创建一个产品对象的各个部件指定抽象接口。
(2)ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
(3)Director:构造一个使用Builder接口的对象。
(4)Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
4、建造者模式的UML表示
5、建造者模式的示例
/**
* 建造者接口
* */
public interface Builder {
void buildPartA();
void buildPartB();
Product getResult();
}
/**
* 实际建造者1
* */
public class ConcreteBuilder1 implements Builder{
private Product product;
public ConcreteBuilder1(){
product=new Product();
}
@Override
public void buildPartA() {
product.add("部件A");
}
@Override
public void buildPartB() {
product.add("部件B");
}
@Override
public Product getResult() {
return product;
}
}
/**
* 实际建造者2
* */
public class ConcreteBuilder2 implements Builder{
private Product product;
public ConcreteBuilder2(){
product=new Product();
}
@Override
public void buildPartA() {
product.add("部件X");
}
@Override
public void buildPartB() {
product.add("部件Y");
}
@Override
public Product getResult() {
return product;
}
}
/**
* 具体产品
* */
public class Product {
List<String> parts=new ArrayList<String>();
public void add(String part){
parts.add(part);
}
public void show(){
System.out.println("\n产品创建:");
for (String part : parts) {
System.out.println(part);
}
}
}
/**
* 指挥者
* */
public class Director {
public void construct(Builder builder){
builder.buildPartA();
builder.buildPartB();
}
}
测试类:
public class Test {
public static void main(String[] args) {
//指挥者
Director director=new Director();
//具体的建造者
Builder builder1=new ConcreteBuilder1();
//具体的建造者
Builder builder2=new ConcreteBuilder2();
//构建产品
director.construct(builder1);
Product product=builder1.getResult();
product.show();
//构建产品
director.construct(builder2);
product=builder2.getResult();
product.show();
}
}
输出:
产品创建:
部件A
部件B
产品创建:
部件X
部件Y