摘要:目錄生成器模式為什么使用生成器模式應(yīng)用實(shí)例生成器模式生成器模式英是一種設(shè)計(jì)模式,又名建造模式,是一種對(duì)象構(gòu)建模式。
目錄
生成器模式+為什么使用生成器模式
應(yīng)用實(shí)例
生成器模式生成器模式:(英:Builder Pattern)是一種設(shè)計(jì)模式,又名:建造模式,是一種對(duì)象構(gòu)建模式。它可以將復(fù)雜對(duì)象的建造過(guò)程抽象出來(lái)(抽象類別),使這個(gè)抽象過(guò)程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對(duì)象。
構(gòu)建過(guò)程,也就是我們?cè)谝粋€(gè)類中的那些set方法,通常我們會(huì)通過(guò)set方法來(lái)對(duì)類中的屬性進(jìn)行一系列的設(shè)置,來(lái)獲取這些屬性,我們通常會(huì)通過(guò)get方法來(lái)獲得,如果一個(gè)類,其中的屬性比較多,我們的set方法因此也會(huì)比較多,加上類的其他方法,整個(gè)看起來(lái)就比較臃腫了,因此我們將這些比較繁雜的設(shè)置步驟多帶帶建一個(gè)類,來(lái)對(duì)該類進(jìn)行相應(yīng)的屬性設(shè)置,按照我們的要求構(gòu)造出原來(lái)的類,當(dāng)然這是從使得代碼簡(jiǎn)潔的角度來(lái)說(shuō),功能上有點(diǎn)類似于工廠模式,通過(guò)不同的生成器來(lái)生成各自具有不同特征的對(duì)象。不過(guò)接下來(lái)要講的Android中的AlertDialog并沒(méi)有體現(xiàn)這一點(diǎn)。
應(yīng)用實(shí)例為了更充分了解生成器模式,下面是一段來(lái)自維基百科的對(duì)于生成器模式講解時(shí)用的一段代碼,從中,從中我們不難看出生成器模式的代碼結(jié)構(gòu)。
//Pizza基類 class Pizza { private String dough = ""; private String sauce = ""; private String topping = ""; public void setDough (String dough) { this.dough = dough; } public void setSauce (String sauce) { this.sauce = sauce; } public void setTopping (String topping) { this.topping = topping; } } //pizza生成器抽象類 abstract class PizzaBuilder { protected Pizza pizza; public Pizza getPizza() { return pizza; } public void createNewPizzaProduct() { pizza = new Pizza(); } public abstract void buildDough(); public abstract void buildSauce(); public abstract void buildTopping(); } //具體的pizza生成器類 class HawaiianPizzaBuilder extends PizzaBuilder { public void buildDough() { pizza.setDough("cross"); } public void buildSauce() { pizza.setSauce("mild"); } public void buildTopping() { pizza.setTopping("ham+pineapple"); } } class SpicyPizzaBuilder extends PizzaBuilder { public void buildDough() { pizza.setDough("pan baked"); } public void buildSauce() { pizza.setSauce("hot"); } public void buildTopping() { pizza.setTopping("pepperoni+salami"); } } //創(chuàng)建pizza class Waiter { private PizzaBuilder pizzaBuilder; public void setPizzaBuilder (PizzaBuilder pb) { pizzaBuilder = pb; } public Pizza getPizza() { return pizzaBuilder.getPizza(); } public void constructPizza() { pizzaBuilder.createNewPizzaProduct(); pizzaBuilder.buildDough(); pizzaBuilder.buildSauce(); pizzaBuilder.buildTopping(); } } //創(chuàng)建實(shí)例 class BuilderExample { public static void main(String[] args) { Waiter waiter = new Waiter(); PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder(); PizzaBuilder spicy_pizzabuilder = new SpicyPizzaBuilder(); waiter.setPizzaBuilder ( hawaiian_pizzabuilder ); waiter.constructPizza(); Pizza pizza = waiter.getPizza(); } }
但是Android中的Builder則作為了AlertDialog的一個(gè)內(nèi)部類用來(lái)對(duì)于AlertDialog的一些屬性的設(shè)置,然后通過(guò)內(nèi)部類創(chuàng)建一個(gè)實(shí)例出來(lái),這樣一來(lái),所起的作用也就是僅在于將屬性設(shè)置部分置于一個(gè)結(jié)構(gòu)包起來(lái),方便后期的維護(hù)。
至此設(shè)計(jì)模式中較為常用的模式講解學(xué)習(xí)心得分享結(jié)束,接下來(lái)開(kāi)始展開(kāi)JVM的系列文章,同時(shí)也會(huì)補(bǔ)充一些平時(shí)遇到的一些其它的設(shè)計(jì)模式等相關(guān)的東西。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/64652.html
時(shí)間:2017年09月03日星期日說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 面向切面 課程章節(jié) 概覽 AOP使用 AOP原理 AOP開(kāi)源運(yùn)用 課程實(shí)戰(zhàn) 課程總結(jié) 面向切面編程是一種...
摘要:全網(wǎng)最貼心系列教程和配套代碼歡迎關(guān)注個(gè)人技術(shù)博客。所以我花費(fèi)了個(gè)多月整理了這份教程,一共分成節(jié),每節(jié)都有講解,并且準(zhǔn)備了配套代碼。奈何深感水平不夠,只有一腔熱情,所以直接開(kāi)放了教程和源碼。 webpack-demos:全網(wǎng)最貼心 webpack 系列教程和配套代碼 歡迎關(guān)注個(gè)人技術(shù)博客:godbmw.com。每周 1 篇原創(chuàng)技術(shù)分享!開(kāi)源教程(webpack、設(shè)計(jì)模式)、面試刷題(偏前...
閱讀 2064·2021-09-22 15:43
閱讀 8621·2021-09-22 15:07
閱讀 1078·2021-09-03 10:28
閱讀 2052·2021-08-19 10:57
閱讀 1061·2020-01-08 12:18
閱讀 2972·2019-08-29 15:09
閱讀 1521·2019-08-29 14:05
閱讀 1640·2019-08-29 13:57