07_建造者

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

最核心的是builder和dirctor
director

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Director
{
private Builder builder;
public Director(Builder builder)
{
this.builder=builder;
}
//产品构建与组装方法
public Product construct()
{
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}

builder

1
2
3
4
5
6
7
8
9
10
11
12
13
abstract class Builder
{
//创建产品对象
protected Product product=new Product();
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
//返回产品对象
public Product getResult()
{
return product;
}
}

典型调用:

1
2
3
4
5
6
7
public static void main(String[] args)
{
Builder builder=new ConcreteBuilder();
Director director=new Director(builder);
Product product=director.construct();
product.show();
}

可以看出,直接返回product的是Director,但实际是通过Director内部持有的builder返回
Director通过定义builder方法的不同执行流对过程进行多态(如果需要不同的流程则新定义Director重写
builder通过对相同执行流程的不同具体实现进行多态(也就是相同执行流不同具体实现则定义builder重写)
例如:
高端车:加工-上漆-装轮胎-洗车(水洗)
一般车: 加工-装轮胎-上漆-洗车(酒精洗)
流程的不同通过不同Director实现。执行的细节不同通过builder实现。
其本质上是一种动作拆分方法Or功能拆分方法,虽然实际用作建造者场景比较少,但后续其他设计模式基本都是类似套路。本质上就是动作拆分,拆分给不同的对象,然后需要重修修改时,只需要在合适的层次重写另一个对象就行了(避免了对旧对象的改动)。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×