建造者模式
定义
又称生成器模式,是一种对象创建型模式,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。
英文定义:Separate the construction of a complex object from its representation so that the same construction process can create different representations .
建造者模式的UML类图如下所示:
建造者模式.jpg上图中所涉及到的角色及职责:
- 抽象建造者(Builder):给出一个抽象接口,以规范产品对象的各个组成成分的建造。
- 具体建造者(ConcreteBuilder):与应用程序紧密相关的一些类,它们在应用程序的调用下创建产品的实例。
- 导演者(Director):指挥使用哪个具体创造者来完成产品的创建,是创建工作的调用者。
- 产品(Product):建造中的复杂对象。
示例代码如下所示:
//产品类
public class Product{
public void doSomething(){
//独立业务处理
}
}
//抽象建造者
public abstract class Builder{
//设置产品的不同部分,以获得不同的产品
public abstract void setPart();
//建造产品
public abstract Product buildProduct();
}
//具体建造者
public class ConcreteProduct extends Builder{
private Product product = new Product();
//设置产品零件
public void setPart(){
//产品类内的逻辑处理
}
//组件一个产品
public Product buildProduct(){
return product;
}
}
//导演类
public class Director{
private Builder builder = new ConcreteProduct();
//构建不同的产品
public Product getAProduct(){
builder.setPart();
//设置不同的零件,产生不同的产品
return builder.buildProduct();
}
}
优缺点
优点:
- 封装性:使用建造者模式可以是客户端不必知道产品内部组成的细节。
- 建造者独立,容易扩展
- 便于控制细节风险
缺点:
- 建造者模式比较符合产品差别不大的对象的创建,如果差别很大,就会导致非常多的具体的创建者,这时最好结合工厂方法模式。
使用场景:
- 相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可使用该模式。
- 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,用该模式非常合适。
- 在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时,可以采用建造者模式封装该对象的创建过程。
注意事项:
- 建造者模式是为了解决复合对象的创建而产生的,建造者模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。有利于明确各部分的职责目标,有利于软件结构的优化。
- 建造者模式最主要的额功能时基本方法的调用顺序安排,顺序不同产生的对象也不同;而工厂方法则重点是创建,创建零件是它的主要职责组装顺序则不是它关心的。
网友评论