建造者模式

建造者模式

定義:

      Separate the construction of a complex object from its representation so that the same construction process can create different representations. java

        將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。設計模式

通用類圖:

通用代碼:

產品的抽象類:
ui

package Builder;

import java.util.ArrayList;

public abstract class AbstractProduct {
	
	//記錄執行順序
	private ArrayList<String> part = new ArrayList<String>();
	
	public abstract void doSomething();
	
	public abstract void doOtherthing();
	
	//final,子類不可重寫
	final public void executive(){
		for(int i=0;i<this.part.size();i++){
			String actionName = this.part.get(i);
			if(actionName.equals("doSomething")){
				this.doSomething();
			}
			else if(actionName.equals("doOtherthing")){
				this.doOtherthing();
			}
		}
	}
	
	//final,子類不可重寫
	final public void setPart(ArrayList<String> part){
		this.part = part;
	}
}

產品的實現類:this

package Builder;

public class Product extends AbstractProduct{

        //子類具體描述步驟
	public void doSomething(){ 
		System.out.println("will do something...");
	}
	
	public void doOtherthing() {
		System.out.println("Something has done.Otherthing will be done...");
	}
}

建造者抽象類:
spa

package Builder;

import java.util.ArrayList;

public abstract class Builder {
	
	//設置產品的不一樣部分,以得到不一樣的產品 
	public abstract void setPart(ArrayList<String> part);
	
	//建造產品 
	public abstract Product buildProduct(); 
}

建造者實現類:
設計

package Builder;

import java.util.ArrayList;

public class ConcreteProduct extends Builder{
	
	private Product product = new Product();
	
	public void setPart(ArrayList<String> part) {
		this.product.setPart(part);
	}
	
	public Product buildProduct() {
		return this.product;
	}


}

導演類:
code

package Builder;

import java.util.ArrayList;

//對不一樣產品的生產順序再封裝,對高層屏蔽細節
public class Director {
	private  ArrayList<String> part = new ArrayList<String>();
	private  Builder builder = new ConcreteProduct();
	
	public Product getAProduct() {
		this.part.clear();
		this.part.add("doSomething");
		this.part.add("doOtherthing");
		builder.setPart(part);
		return builder.buildProduct();
	}
}

客戶端:對象

package Builder;

public class Client {
	public static void main(String[] args) {
		Director director = new Director();
		System.out.println("將產生10個產品");
		for(int i=1;i<11;i++){
			System.out.println("第" + i + "個產品");
			director.getAProduct().executive();
			System.out.println();
		}
	}
}

說明:get

    1. Product 產品類:一般是實現了模板方法模式,也就是有模板方法和基本方法;產品

    2. Builder 抽象建造者:規範產品的組建,通常是由子類實現。

    3. ConcreteBuilder 具體建造者實現抽象類定義的全部方法,而且返回一個組件好的對象。

    4. Director 導演:負責安排已有模塊的順序,而後告訴Builder開始建造;

建造者模式優勢:

    1. 良好的封裝性

    2. 建造者獨立,內容可擴展

    3. 便於控制細節風險

建造者模式使用場景:

    1.相同的方法,不一樣的執行順序,產生不一樣的結果

    2.多個部件均可以裝配到一個對象中,產生的結果又不相同

    3.產品類很是複雜


參考資料:

《設計模式之禪》        秦小波著        第十一章建造者模式

百度百科                                            建造者模式

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息