- 建造者模式将多个简单对象一步一步组装成复杂对象的过程
- 使用的条件:构建复杂产品的原材料(类)基本是固定的,只是组装经常变化
结构角色
- 原材料
- 抽象的建造者(定义构建的方法)
- 建造者 (根据原材料去构建出产品)
- 指挥官(指挥让哪个建造者去建造,不同的建造者建造出来的是不一样的产品)
具体的过程
(这里就不结合其他的设计模式,主要讲明白建造者设计模式为主)
- 原材料
/**
* 原材料1
*/
public class Product1 {
}
/**
* 原材料2
*/
public class Product2 {
}
/**
* 原材料3
*/
public class Product3 {
}
- 抽象建造者
/*
* 抽象的建造者
*/
public interface Builder {
//定义一个构建产品的方法
Object createProduct ();
}
- 具体的建造者
/**
* 具体的建造者1
* 组合方案:原材1 + 原材料2
*/
public class ConcreteBuilder1 implements Builder {
private Product1 product1 = new Product1();
private Product2 product2 = new Product2();
@Override
public Object createProduct () {
//里面根据 原材1 + 原材料2 创建具体的产品
//比如这里返回他们之间的包含关系
return product1.equals(product2);
}
}
/**
* 具体的建造者2
* 组合方案:原材料2+原材料3
*/
public class ConcreteBuilder2 implements Builder {
private Product2 product2 = new Product2();
private Product3 product3 = new Product3();
@Override
public Object createProduct () {
//里面根据 原材2 + 原材料3 创建具体的产品
//比如这里返回他们之间的包含关系
return product2.equals(product3);
}
}
- 指挥官
/**
* 指挥官 这里可以往上面抽象一层 抽象指挥官
*/
public class Director {
//提供一个获取复杂产品的方法
public Object createProduct (Builder builder) {
return builder.createProduct();
}
}
- 调用的过程
//产品1
Object product1 = new Director().createProduct(new ConcreteBuilder1());
//产品2
Object product3 = new Director().createProduct(new ConcreteBuilder2());
我们只需要编写不同的具体建造者,去创建不同的组合产品,传入,就可以获取到不同的产品