国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【設計模式】Builder模式

2019-11-09 16:58:16
字體:
來源:轉載
供稿:網友

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();


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定襄县| 平和县| 叙永县| 阿坝县| 玉龙| 建始县| 南和县| 泸州市| 桐乡市| 天气| 双峰县| 应用必备| 广昌县| 台湾省| 临洮县| 汤阴县| 定南县| 曲麻莱县| 雅安市| 运城市| 大安市| 桃源县| 香港| 玉田县| 四平市| 丰原市| 信阳市| 民县| 安仁县| 绍兴县| 扬州市| 鄂托克旗| 融水| 元谋县| 普兰店市| 新竹县| 毕节市| 克拉玛依市| 玉门市| 神木县| 瑞丽市|