概念: 生成器模式也稱之為建造者模式。生成器模式的意圖在於將一個複雜的構建與其表示相分離,構建與產品分離。 UML: Ibuild介面清晰地反映了創建產品Product的流程。 生成器模式涉及4個關鍵角色:產品(Product),抽象生成器(IBuilder),具體生成器(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(); } }
總之,對於生成器模式創建複雜對象而言,主要原則是對象構造過程與表示相分離。