構建器模式
阿新 • • 發佈:2017-06-09
ide http 一個 truct implement ride img 註入 用戶
*構建器模式:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。類圖如下:
*product產品類:表示被構建器構建的復雜對象,包含多個部件。
1 //產品接口 示意性產品,所以沒有任何方法 2 public interface Product{ 3 }
*builder構建器接口:定義創建一個product對象所需要的各個部件的操作。
1 //生成器接口 2 public interface Builder{ 3 public void builderPart1(); 4 public void builderPart2(); 5 publicProduct getResult(); 6 }
*concretebuilder具體的構建器:實現各個部件的創建,並負責組裝product對象的各個部件,同時還提供一個讓用戶獲取組裝完成後的產品對象的方法。**具體的構建部件方法要由此角色來實現。
1 //具體構建器 2 public class ConcreteBuilder implements Builder{ 3 private Product resultProduct = new Product(){};//示意性產品這裏用匿名對象表示 4 @Override 5 public Product getResult(){6 return resultProduct; 7 } 8 @Override 9 public void builderPart1() { 10 //構建部件1具體方法 11 } 12 @Override 13 public void builderPart2() { 14 //構建部件2具體方法 15 } 16 }
*director指導者:主要來使用builder接口,以一個統一的過程來構建所需要的product對象。**構建算法要由此角色來實現。
1 //指導者 2public class Director{ 3 private Builder builder; 4 //註入構建器對象 5 public Director(Builder builder){ 6 this.builder = builder; 7 } 8 //指導構建器構建產品,這裏實現構建步驟的算法(本例是按part1、part2順序,實際場景中會復雜得多) 9 public void construct(){ 10 builder.builderPart1(); 11 builder.builderPart2(); 12 } 13 public Product getProduct(){ 14 return builder.getResult(); 15 } 16 }
客戶端代碼:
1 public class Client { 2 public static void main(String[] args) { 3 Builder builder = new ConcreteBuilder(); 4 Director director = new Director(builder); 5 director.construct(); 6 Product product = director.getProduct(); 7 } 8 }
總結:
構建器模式的本質就是分離整體構建算法和部件構造,使產品構建過程與具體產品表現松耦合。
構建器模式主要功能是構建復雜產品,而且是細化的、分步驟的構建產品。這個構建過程是統一的、固定不變的,它把變化的過程放到了具體構建器裏,只要實現不同的生成器,相同的構建過程就可以構建出的不同的產品。
構建器模式