Java设计模式-Builder生成器模式
概念:
生成器模式也称之为建造者模式。生成器模式的意图在于将一个复杂的构建与其表示相分离,构建与产品分离。
UML:
Ibuild接口清晰地反映了创建产品Product的流程。
生成器模式涉及4个关键角色:产品(Product),抽象生成器(IBuilder),具体生成器(Builder),指挥者(Director).
代码演示:
(1)定义1个产品类
public class Unit1{...} public class Unit2{...} public class Unit3{...} public class Product { Unit1 u1; Unit2 u2; Unit3 u3; }
(2)定义n个生成器Builder类
public interface IBuild { public void createUnit1(); public void createUnit2(); public void createUnit3(); public Product composite();
public Product create(); } public class BuildProduct implements IBuild { Product p = new Product(); public void createUnit1(){ //p.u1 = ... }
public Product create(){
return composite();
} ...... } public class BuildProduct1 implements IBuild { Product p = new Product(); public void createUnit1(){ //p.u1 = ... } ...... }
(3)定义一个统一调度类也叫指挥者(Director).是对生成器接口IBuilder的封装。
public class Director { private IBuild build; public Director(IBuild build){ this.build = buid; } public Product build(){ build.create(); } public static void main(){ IBuild build = new BuildProduct(); Director direcotr = new Director(build); Prodcut p = director.build(); } }
另一种实现方式:
利用Product1派生类方法,也可以实现类似的生成器功能。
代码演示:
//定义抽象生成器 public abstract class Product { Unit1 u1; Unit2 u2; .... abstract void createUnit1(); abstract void createUnit2(); ... abstract void composite(); } //定义具体生成器 public class BuildProduct extends Product { void createUnit1() { u1=.... } .... void composite(){ /*关联 u1, u2, u3*/} } //定义指挥者类 public class Director { Product p; public Director(Product p) { this.p = p; } void build() { p.createUnit1(); p.createUnit2(); .... p.composite(); } }
总之,对于生成器模式创建复杂对象而言,主要原则是对象构造过程与表示相分离。