建造者模式(生成器模式)
一、定义
将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示
建造者模式通用类图
建造者模式源码
-
产品类
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(){ /* * 产品类内的逻辑处理 */ } //组建一个产品 public Product buildProduct() { return product; } }
-
导演类
public class Director { private Builder builder = new ConcreteProduct(); //构建不同的产品 public Product getAProduct(){ builder.setPart(); //设置不同的零件,产生不同的产品 return builder.buildProduct(); } }
导演类起到封装的作用,避免高层模块深入到建造者内部的实现类
二、建造者模式的优点
-
封装性
使用建造者模式可以使客户端不必知道产品内部的细节。
-
建造者独立,容易扩展
需要新添加一个产品类型时,添加一个新的建造者模式即可,无需修改原来内容
-
便于控制细节风险
由于具体的的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响
三、建造者模式的使用场景
-
相同的方法,不同的执行顺序,产生不同的事件结果时
-
多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时
-
在对象创建过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到时
注意:建造者模式关注的是零件类型和装配顺序,模板方法关注的是它的对象创建,不关注组建的顺序,这是它与工厂方法模式最大不同的地方,