设计模式简单介绍(java语言)– 建造者模式
1. 建造者模式的定义
建造者模式也叫做生成器模式,其定义如下:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
通用类图:
在建造者模中,通常有如下4个角色:
Product产品类
通常是实现了模板方法模式,也就是有模板方法和基本方法,参考模板方法模式介绍。
Builder抽象建造者
规范产品的组建,一般由子类实现。
ConcreteBuilder具体建造者
实现抽象定义的所有方法,并且返回一个组建好的对象。
Director导演类
负责安排已有的模板的顺序,然后告诉builder开始建造。
2. 通用源码
产品类:
public class Product {
public void doSomeThing(){
//独立的业务处理
}
}
抽象建造者:
public abstract class Builder {
//设置产品的不同部分,以获得不同的产品
public abstract void setPart();
//建造产品
public abstract Product builderPrroduct();
}
其中,setpart方法是零件的配置,什么是零件?其他的对象,获得一个不同的零件,或者不同的装配顺序就可能产生不同的产品。
具体建造者:
public class ConcreteProduct extends Builder {
private Product product = new Product();
//组建一个产品
@Override
public Product builderPrroduct() {
return product;
}
//设置产品的零件
@Override
public void setPart() {
/**
* 产品类内的逻辑处理
*/
}
}
需要注意的是,如果有多个产品类就有几个具体的建造者,而且这多个产品类具有相同的接口或者抽象类。
导演类:
public class Director {
private Builder builder = new ConcreteProduct();
public Product getAProduct(){
builder.setPart();
/**
* 设置不同的零件,产生不同的产品
*/
return builder.builderPrroduct();
}
}
3.使用建造者模式的场景和优缺点
使用场景
当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
相同的方法,不同的执行顺序,产生不同的事件结果时。
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。
创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
优缺点
优点:
使用建造者模式可以使客户端不必知道产品内部组成的细节。
具体的建造者类之间是相互独立的,容易扩展。
由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
缺点:
产生多余的Build对象以及Dirextor类。