1. 程式人生 > >構建器模式

構建器模式

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     public
Product 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 //指導者
 2
public 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 }

總結:

  構建器模式的本質就是分離整體構建算法和部件構造,使產品構建過程與具體產品表現松耦合。
  構建器模式主要功能是構建復雜產品,而且是細化的、分步驟的構建產品。這個構建過程是統一的、固定不變的,它把變化的過程放到了具體構建器裏,只要實現不同的生成器,相同的構建過程就可以構建出的不同的產品。

構建器模式