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

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

【設計模式】Builder模式

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

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


上一篇:動態加載

下一篇:ReactiveCocoa入門

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘孜县| 大宁县| 通渭县| 文登市| 常山县| 佛学| 壶关县| 沿河| 海晏县| 广灵县| 合作市| 岳西县| 三都| 故城县| 临夏县| 博客| 临沂市| 深水埗区| 安图县| 安龙县| 灵山县| 镇坪县| 潞城市| 游戏| 资源县| 开远市| 大姚县| 老河口市| 南通市| 太湖县| 博客| 山东省| 彩票| 望奎县| 德庆县| 桃园县| 台东市| 贞丰县| 连州市| 南平市| 京山县|