【設計模式】Builder模式

Builder模式:(對外部隱藏構建細節)

將對象的構建過程和它的表示隔離,同樣的構建過程,創建不同的表示。

典型用例:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      context).threadPriority(Thread.NORM_PRIORITY - 2)
      .denyCacheImageMultipleSizesInMemory()
      .discCacheFileNameGenerator(new Md5FileNameGenerator())
      .tasksProcessingOrder(QueueProcessingType.LIFO)
      .writeDebugLogs() // Remove for release app
      .build();
ImageLoader.getInstance().init(config);

運用場景:

1>產品複雜(不同種類,不同規格,不同顏色等等)

2>初始化對象複雜(參數多,且都有默認值時,不允許用戶隨意改動)

3>多個零件都可以裝到一個對象中,運行結果卻不同(電腦組裝完畢,開機之後,品牌不同)

4>產品的成產規範相同(固定流程,例如成產電腦,或者電子產品)

5>用戶可以自定義產品new ClassA().buildA().buildB().create();//返回一種特定產品

 

Product:產品,抽象類

Builder:產品生產規範,抽象類

ConcreteProduct:具體產品,Product的子類

ConcreteBuilder:具體生產規範,Builder的子類

Director:統一組建過程

示例代碼:

/**
*計算機抽象類
*/
public abstract class Product{
	protected String cpu;
	protected String display;
	protected String os;
	public abstract void setCpu();
	public abstract void setDisplay();
	public abstract void setOs();
	@Override
	public String toString(){
		return "計算機[CPU:"+cpu+"顯示器:"+display+"操作系統:"+os+"]";
	}
}

/**
*計算機具體類(細節)
*/
public class ConcreteProduct{
	
	@Override
	public void setOs(){
		os = "Mac OS X 10.10";
	}
}

/**
*抽象Builder類
*/
public abstract class Builder{
	public abstract buildCpu(String cpu);
	public abstract buildDisplay(String diaplay);
	public abstract buildOs();
	public abstract Product build();
}

/**
*具體的Builder類
*/
public class ConcreteBuilder extends Builder{
	private Product product = new ConcreteProduct();
	@Override
	public void buildCpu(String cpu){
		product.setCpu(cpu);
	}
	@Override
	public void buildDisplay(String diaplay){
		product.setDisplay(diaplay);
	}
	@Override
	public void buildOs(){
		product.setOs();
	}
	@Override
	public Product build(){
			return product;
	}
}

/**
*安裝電腦(封裝爲一個類,外部統一調用)
*/
public class Director{
	Builder builder = null;
private Director director = null;
	Private Director(){
	}
public Director getInstance(){
   if(director == null){
    director = new Director();
}
   return director;
} 
/*
 *初始化設置(比如這裏,統一了電腦的系統型號等)
 */
public void init(Builder builder){
   this builder = builder; 
}
public void A(){} 
public void B(){} 
public void C(){} 
}

/**
*測試類(外部調用Director)
*/
public class Test{
	Builder builder = new ConcreteBuilder().builder.buildCpu("因特爾").builder.buildDisplay("Retina顯示器").builder.buildOs().build();
Director director = New Director().getIntance().init(builder);//初始化設置,目的:統一生產規格
director.A();//在統一規格下,增加電腦的新功能(需要新參數,再進行擴充,後續給出)
	System.out.println("成功安裝"+new ConcreteBuilder.build().toString());
}

實例總結:

Builder模式的目的就是,把複雜的生產過程,以清晰簡單的形式,展現出來。

Director:統一安裝過程,將電腦安裝的細節隱藏起來。

是不是想起了AlerDialog的構建過程

AlerDialog.Builder builder = new AlerDialog.Builder(context);

builder.setIcon(R.drawanle.icon).setTitle(“Title”);

builder.create().show();




發佈了80 篇原創文章 · 獲贊 65 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章