Android重拾設(shè)計模式系列——工廠方法模式

個人博客CoorChice,https://chenbingx.github.io/ ,最新文章將會首發(fā)CoorChice的博客,歡迎探索哦 !
同時,搜索微信公眾號CoorChice岩调,或掃描文章末尾二維碼,可以關(guān)注我的微信公眾號赡盘。同期文章也將會優(yōu)先推送到微信公眾號中号枕,以提醒您有新鮮文章出爐。

封面-設(shè)計模式.png

工廠方法模式和簡單工廠模式本質(zhì)是類似的陨享,都是用來封裝產(chǎn)品的創(chuàng)建過程葱淳。但它們的實現(xiàn)也有很大的,所以通常被作為兩種不同的設(shè)計模式看待抛姑。

簡單工廠模式傳送門

定義及實質(zhì)

  • 定義
    定義一個用于創(chuàng)建對象的接口赞厕,讓子類決定實例化那一個對象,即使一個類的實現(xiàn)延遲到子類實現(xiàn)定硝。
  • 實質(zhì)
    延遲到子類選擇實現(xiàn)皿桑。

雖然都是選擇實現(xiàn),但工廠方法模式主要用于創(chuàng)建一系列的產(chǎn)品簇(就是相似的東西)蔬啡,而簡單工廠法可以創(chuàng)建任何互相沒有關(guān)聯(lián)的實例诲侮。

模式圖解

工廠方法模式UML圖

工廠方法模式UML圖

從上圖可以看出:

  1. Creator是抽象父類,ConcreteCreator是其子類箱蟆;
  2. ConcreteCreator重寫了父類的factoryMethod() 來創(chuàng)建真正的產(chǎn)品ConcreteProduct沟绪,也就是說ConcreteCreator依賴ConcreteProduct;需要注意空猜,Creator依賴的是Product绽慈;
  3. ConcreteProduct實現(xiàn)了Product接口。
//Creator
public abstract class Creator{
    public abstrat Product factoryMethod();
    
    public void someOpration(){
        //在這里延遲創(chuàng)建了Product
        factorMethod().doSomthing();
    }
}

//ConcreteCreator
public class ConcreteCreator extends Creator{
    @Overrid
    public Product factoryMethod(){
        return new ConcreteProduct();
    }
}

//Product
public interface Product{
   void doSomthing();
}

//public class ConcreteProduct implement Product{
    @Overrid 
    public void doSomthing(){
        System.out.println("ConcreteProduct");
    }
}

下面看看Client怎么使用:

public class Client{
    priavte Creator creator;
    public static void main(String[] args){
        creator = new ConcreteCreator(); //創(chuàng)建符合需求的Creator子類
        creator.someOpration(); //調(diào)用這個方法才會創(chuàng)建Product
    }
}

工廠方法模式順序圖

工廠方法模式順序圖

結(jié)合上面的代碼看辈毯。

模式優(yōu)缺點

優(yōu)勢

  • 體現(xiàn)了依賴倒置 的原則久信,使程序的可擴展性增強,當有新需求時漓摩,只需要增加新的Creator子類,替換Client中的子類入客,而不需要修改其它地方管毙;
  • 可以在不知道對象創(chuàng)建過程未確定的情況下進行編程腿椎;
  • 可以很好的鏈接平行類層次結(jié)構(gòu)。

缺點

  • 工廠類和產(chǎn)品類耦合在一起夭咬。

拓展

平行類層次結(jié)構(gòu)

指一個類層級(工廠方法模式中啃炸,每個Creator的抽象就代表著一個類層級)中的每一個類,在另一個類層級中都有對應(yīng)的類與之呼應(yīng)卓舵,這樣的一組類層就稱為平行類層次結(jié)構(gòu) 南用。
解釋:
以Shape為例,具體的Shape對象和Shape對象的行為就構(gòu)成了平行類層次結(jié)構(gòu)掏湾。Shape對象層級中有Rectangle裹虫、Oval等,在Shape對象行為層級中融击,有Rectangle筑公、Oval等的面積、周長等行為與之對應(yīng)尊浪。所以它們構(gòu)成了平行類層次結(jié)構(gòu)匣屡。

CoorChice的公眾號
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市拇涤,隨后出現(xiàn)的幾起案子捣作,更是在濱河造成了極大的恐慌,老刑警劉巖鹅士,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件券躁,死亡現(xiàn)場離奇詭異,居然都是意外死亡如绸,警方通過查閱死者的電腦和手機嘱朽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怔接,“玉大人搪泳,你說我怎么就攤上這事《笃辏” “怎么了岸军?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓦侮。 經(jīng)常有香客問我艰赞,道長,這世上最難降的妖魔是什么肚吏? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任方妖,我火速辦了婚禮,結(jié)果婚禮上罚攀,老公的妹妹穿的比我還像新娘党觅。我一直安慰自己雌澄,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布杯瞻。 她就那樣靜靜地躺著镐牺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魁莉。 梳的紋絲不亂的頭發(fā)上睬涧,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音旗唁,去河邊找鬼畦浓。 笑死,一個胖子當著我的面吹牛逆皮,可吹牛的內(nèi)容都是我干的宅粥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼电谣,長吁一口氣:“原來是場噩夢啊……” “哼秽梅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剿牺,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤企垦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后晒来,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钞诡,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年湃崩,在試婚紗的時候發(fā)現(xiàn)自己被綠了荧降。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡攒读,死狀恐怖朵诫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薄扁,我是刑警寧澤剪返,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站邓梅,受9級特大地震影響脱盲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜日缨,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一钱反、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦面哥、人聲如沸乙各。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恩静,卻和暖如春焕毫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驶乾。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工邑飒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人级乐。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓疙咸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親风科。 傳聞我的和親對象是個殘疾皇子撒轮,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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

  • 1 場景問題# 1.1 導(dǎo)出數(shù)據(jù)的應(yīng)用框架## 考慮這樣一個實際應(yīng)用:實現(xiàn)一個導(dǎo)出數(shù)據(jù)的應(yīng)用框架,來讓客戶選擇數(shù)據(jù)...
    七寸知架構(gòu)閱讀 6,644評論 6 74
  • 設(shè)計模式匯總 一贼穆、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用题山、多...
    MinoyJet閱讀 3,939評論 1 15
  • 工作了也1年多了,最近2個月把那本經(jīng)典的設(shè)計模式看了一遍故痊。還是蠻有收獲的顶瞳。至少比以前在學(xué)校的時候看多了很多的體會。...
    潘逸飛閱讀 692評論 0 0
  • 簡單工廠模式雖然簡單愕秫,但存在一個很嚴重的問題慨菱。當系統(tǒng)中需要引入新產(chǎn)品時,由于靜態(tài)工廠方法通過所傳入?yún)?shù)的不同來創(chuàng)建...
    justCode_閱讀 1,182評論 1 9
  • 簇入你的懷抱 滿山松杉 毛竹和知名不知名的雜樹 一片接一片 一叢連一叢 蔥蘢戴甩、蒼翠 蓋地遮天 從山麓一直擁上山頂 ...
    藍在南方閱讀 248評論 0 2