Android 設(shè)計(jì)模式:(五)工廠方法模式

前言
本文是對(duì)《Adroid 源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》 何紅輝旷太、關(guān)愛(ài)民 著 人民郵電出版社所做的讀書筆記劈榨。文章是對(duì)本書的一些列學(xué)習(xí)筆記浙炼,如若有侵犯到作者權(quán)益,還望作者能聯(lián)系我土童,我會(huì)及時(shí)下架诗茎。
這本書不錯(cuò),有興趣的同學(xué)可以買原書看看献汗。
感興趣的朋友歡迎加入學(xué)習(xí)小組QQ群: 193765960敢订。

版權(quán)歸作者所有,如有轉(zhuǎn)發(fā)罢吃,請(qǐng)注明文章出處:https://xiaodanchen.github.io/archives/

相關(guān)文章:

Android 設(shè)計(jì)模式:(一)面向?qū)ο蟮牧笤瓌t
Android 設(shè)計(jì)模式:(二)單例模式
Android 設(shè)計(jì)模式:(三)Builder模式
Android 設(shè)計(jì)模式:(四)原型模式
Android 設(shè)計(jì)模式:(五)工廠方法模式
Android 設(shè)計(jì)模式:(六)抽象工廠模式
Android 設(shè)計(jì)模式:(七)策略模式

1. 工廠方法模式的定義

定義一個(gè)用于創(chuàng)建對(duì)象的接口楚午,讓子類決定實(shí)例化那個(gè)類。(將零部件組裝成不同的產(chǎn)品)

2. 工廠方法模式的實(shí)現(xiàn)

先說(shuō)明兩個(gè)接口:抽象產(chǎn)品類抽象工廠類尿招。
抽象產(chǎn)品類:定義了產(chǎn)品族矾柜,同一產(chǎn)品組的產(chǎn)品具有相似的功能阱驾,因此可以使用同一個(gè)產(chǎn)品線。
抽象工廠類:定義了產(chǎn)品線

2.1 廠長(zhǎng)小明的幸福人生

屌絲程序員小明怪蔑,越來(lái)越覺(jué)得自己沒(méi)有寫代碼的天賦里覆,一狠心開(kāi)辦了一家汽車廠,主要負(fù)責(zé)Audi某種車型的組裝饮睬,比如Q3租谈、Q5、Q7捆愁,于是乎小明找到了技術(shù)界的裝逼高手小民幫忙給他設(shè)計(jì)了汽車廠流水線割去。
由于Q3、Q5昼丑、Q7這類車型呻逆,因?yàn)閮?nèi)部結(jié)構(gòu)差異并不大,所以一條生產(chǎn)線足以應(yīng)付這3種車型菩帝,小民于是采用了工廠方法模式咖城,開(kāi)玩笑的說(shuō)我們不生產(chǎn)零件,我們只是零件的組裝工呼奢。

源碼

/**
* 抽象產(chǎn)品類:定義該類產(chǎn)品的功能
* 奧迪車
*/
public abstract class AudiCar{
  public abstract void drive();//汽車可以行使
  public abstract void selfNavigation();//汽車可以自動(dòng)巡航
}

/**
* 抽象工廠類:定義生產(chǎn)某類產(chǎn)品產(chǎn)品線
* 奧迪生產(chǎn)線
*/
public abstract class AudiFactory{
  //生產(chǎn)Audi類車
  public abstract <T extends AudiCar> T createCar(Class<T> clz);
}

產(chǎn)品的具體類型

/**
* Q3
*/
public class AudiQ3 extends AudiCar{
  ...
}
 
/**
* Q3
*/
public class AudiQ5 extends AudiCar{
  ...
}
 
/**
* Q3
*/
public class AudiQ7 extends AudiCar{
  ...
}

建成流水線

public class AudiCarFactory extends AudiFactory{
  @Override
  public <T extends AudiCar> T createCar(Class<T> clz){
    AudiCar car = null;
    try{
      car = (AudiCar)Class.forName(clz.getName()).newInstance();
    }catch(Exception e){
      e.printStackTrace();
    }
    return (T)car;
  }
}

成產(chǎn)

public class Client{
  public static void main(String[] agrs){
    //引進(jìn)流水線
    AudiFactory factory = new AudiCarFactory();
    //接收訂單
    Class<? extends AudiCar>[] orders = new Class<>[]{AudiQ3.class,AudiQ5.class,AudiQ5.class,AudiQ3.calss,AudiQ7.calss};
    //生產(chǎn)
    for(int i=0,size=orders.lenth; i<size; i++){
      AudiCar car = (AudiCar)factory.createCar(orders[i]);
    }
  }
}

解析

工廠方法模式:根據(jù)具體產(chǎn)品的類型宜雀,構(gòu)建對(duì)應(yīng)的產(chǎn)品線,生產(chǎn)出對(duì)應(yīng)的產(chǎn)品握础。
工廠方法模式生產(chǎn)的是一類產(chǎn)品組:例如Audi某型號(hào)車的不同車款(入門級(jí)辐董,舒適級(jí),豪華級(jí)禀综,至尊級(jí))简烘。正如上文對(duì)工廠模式的解釋,我們不生產(chǎn)零件定枷,我們只是零件的組裝工

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孤澎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子欠窒,更是在濱河造成了極大的恐慌覆旭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱迟,死亡現(xiàn)場(chǎng)離奇詭異姐扮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)衣吠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門茶敏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人缚俏,你說(shuō)我怎么就攤上這事惊搏≈椋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵恬惯,是天一觀的道長(zhǎng)向拆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)酪耳,這世上最難降的妖魔是什么浓恳? 我笑而不...
    開(kāi)封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮碗暗,結(jié)果婚禮上颈将,老公的妹妹穿的比我還像新娘。我一直安慰自己言疗,他們只是感情好晴圾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著噪奄,像睡著了一般死姚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勤篮,一...
    開(kāi)封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天都毒,我揣著相機(jī)與錄音,去河邊找鬼碰缔。 笑死温鸽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的手负。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姑尺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼竟终!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起切蟋,我...
    開(kāi)封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤统捶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后柄粹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體喘鸟,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年驻右,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了什黑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堪夭,死狀恐怖愕把,靈堂內(nèi)的尸體忽然破棺而出拣凹,到底是詐尸還是另有隱情,我是刑警寧澤恨豁,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布嚣镜,位于F島的核電站,受9級(jí)特大地震影響橘蜜,放射性物質(zhì)發(fā)生泄漏菊匿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一计福、第九天 我趴在偏房一處隱蔽的房頂上張望跌捆。 院中可真熱鬧,春花似錦棒搜、人聲如沸疹蛉。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)可款。三九已至,卻和暖如春克蚂,著一層夾襖步出監(jiān)牢的瞬間闺鲸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工埃叭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摸恍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓赤屋,卻偏偏與公主長(zhǎng)得像立镶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子类早,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • 前言本文是對(duì)《Adroid 源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》 何紅輝媚媒、關(guān)愛(ài)民 著 人民郵電出版社所做的讀書筆記。文章是對(duì)本...
    肖丹晨閱讀 571評(píng)論 0 1
  • 久違的設(shè)計(jì)模式系列視頻涩僻。之前寫過(guò)三篇設(shè)計(jì)模式缭召。感興趣的可以看看。 單例模式 觀察者模式 策略模式 好了逆日,我們開(kāi)始正...
    lovesosoi閱讀 677評(píng)論 0 4
  • 今天是小雨滴們的生日嵌巷,可把白云媽媽和烏云奶奶給忙壞了。 它們要請(qǐng)好多客人室抽,太陽(yáng)公公搪哪,閃電與雷電...
    cici寶閱讀 281評(píng)論 0 2
  • 1 彪子是我在實(shí)習(xí)時(shí)認(rèn)識(shí)的一個(gè)男孩子,因?yàn)閯倽M十八歲已维,舉手投足都像個(gè)孩子行嗤。 并且,他發(fā)自內(nèi)心的認(rèn)為自己就是個(gè)孩子垛耳。...
    朝朝有個(gè)暮閱讀 535評(píng)論 7 11