建造者模式
- 建造者模式(Builder Pattern)属于创建型模式,提供了一种创建对象的最佳方式。
- 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
- 换句话说,使用多个简单的对象一步一步构建出一个复杂的对象。
食用说明书
- 需要解决的代码问题: 区别变和不变的部分
- 何时使用: 一些基本部件不会变,而其组合经常变化。
- 关键代码:
1、建造者:创建和提供实例。
2、指挥者:管理建造出来的实例的依赖关系。 - 优点:
1、建造者独立,易扩展。
2、便于控制细节风险。 - 缺点:
1、产品必须有共同点,范围有限制。
2、如内部变化复杂,会有很多的建造者。 - 使用场景:
1、需要生成的对象具有复杂的内部结构。
2、需要生成的对象内部属性本身相互依赖。 - 与工厂模式的区别: 建造者模式更关注零部件装配的顺序
大鸟写的规范的建造者模式代码
1、产品类
public class Product {
private List<String> parts = new ArrayList<String>();
public void Add(String part) {
parts.add(part);
}
public void Show() {
System.out.print("\n 产品 创建 ---- ");
for(String part : parts) {
System.out.print(part);
}
}
}
2、抽象建造者
public abstract class Builder {
public abstract void BuilderPartA();
public abstract void BuilderPartB();
public abstract Product GetResult();
}
3、具体创建者
public class ConcreteBuilder1 extends Builder {
private Product product = new Product();
@Override
public void BuilderPartA() {
product.Add("部件A");
}
@Override
public void BuilderPartB() {
product.Add("部件B");
}
@Override
public Product GetResult() {
return this.product;
}
}
public class ConcreteBuilder2 extends Builder {
private Product product = new Product();
@Override
public void BuilderPartA() {
product.Add("部件X");
}
@Override
public void BuilderPartB() {
product.Add("部件Y");
}
@Override
public Product GetResult() {
return this.product;
}
}
4、指挥者类
public class Director {
public void Construct(Builder builder) {
builder.BuilderPartA();
builder.BuilderPartB();
}
}
5、客户端代码
public class Builder1Demo {
public static void main(String[] args) {
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
director.Construct(b1);
Product p1 = b1.GetResult();
p1.Show();
director.Construct(b2);
Product p2 = b2.GetResult();
p2.Show();
}
}
6、输出结果
产品 创建 ---- 部件A部件B
产品 创建 ---- 部件X部件Y