建造者模式
建造者模式(Builder Pattern)也叫做生成器模式,属于创建型模式。其定义是:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
感觉这句话很不好理解啊!其实通俗的说,就是这个模式可以将部件和组装过程分开,一步一步创建一个复杂的对象,用户只需要指定对象的类经就可以得到该对象了,而不需要知道其内部的具体构造细节。
模式组成
角色 | 关系 | 作用 |
---|---|---|
Product(产品类) | 具体的产品类 | 通常是实现了模版方法模式 |
Builder(抽象建造者) | 具体建造者的抽象父类 | 规范产品的组建,一般是由子类实现 |
ConcreteBuilder(具体建造者) | 抽象建造者的子类 | 实现抽象类定义的所有方法,并返回一个组建好的对象 |
Director(导演类) | 负责安排已有模块的顺序 | 隔离了客户和对象的生产过程;负责控制产品对象的生产过程 |
表述代码
产品类:
public class Product {
public void doSomething() {
//独立业务处理
}
}
抽象建造者:
public abstract class Builder {
//设置产品的不同部分,以获得不同的产品
public abstract void setPart();
//建造产品
public abstract Product buildProduct();
}
具体建造者:
public class ConcreteBuilder extends Builder {
private Product product = new Product();
public void setPart() {
/**
* 产品类内的逻辑处理
*/
}
@Override
public Product buildProduct() {
// TODO Auto-generated method stub
return product;
}
}
导演类:
public class Directer {
private Builder builder = new ConcreteBuilder();
public Product getAProduct() {
builder.setPart();
/**
* 设置不同的零件,产生不同的产品
*/
return builder.buildProduct();
}
}
优点
- 封装性
- 建造者独立,容易扩展
- 便于控制细节风险
使用场景
- 相同的方法,不同的执行顺序,产生不同的事件结果时可使用
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式
- 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候可以使用建造者模式
- 在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,也可以采用建造者模式封装该对象的创建过程