【設(shè)計(jì)模式】工廠方法模式

定義


定義一個(gè)用于創(chuàng)建對(duì)象的接口凰盔,讓子類(lèi)決定實(shí)例化哪一個(gè)類(lèi)砚嘴。工廠方法使一個(gè)類(lèi)的實(shí)例化延遲到其子類(lèi)

優(yōu)缺點(diǎn)


  • 優(yōu)點(diǎn)

針對(duì)簡(jiǎn)單工廠不容易擴(kuò)展禾嫉,工廠方法將實(shí)例化延遲到子類(lèi)工廠,從而提供擴(kuò)展

  • 缺點(diǎn)

每次新增產(chǎn)品都需要添加工廠和具體產(chǎn)品類(lèi)寂纪,增加系統(tǒng)復(fù)雜性

角色


  • 客戶端 --> 抽象工廠席吴,具體工廠, 抽象產(chǎn)品
  • 抽象產(chǎn)品 --> 具體產(chǎn)品
  • 具體產(chǎn)品
  • 抽象工廠 --> 抽象產(chǎn)品
  • 具體工廠 --> 抽象產(chǎn)品捞蛋,具體產(chǎn)品

代碼


  • 抽象產(chǎn)品
public abstract class Phone
{
    public abstract void Call();
}
  • 具體產(chǎn)品
public class IPhone : Phone
{
    public override void Call()
    {
        System.Console.WriteLine("Call by IPhone");
    }
}
public class AndroidPhone : Phone
{
    public override void Call()
    {
        System.Console.WriteLine("Call by Android");
    }
}
  • 抽象工廠
public abstract class PhoneFactory
{
    public abstract Phone Create();
}
  • 具體工廠
public class IPhoneFactory : PhoneFactory
{
    public override Phone Create()
    {
        return new IPhone();
    }
}
public class AndroidFactory : PhoneFactory
{
    public override Phone Create()
    {
        return new AndroidPhone();
    }
}
  • 客戶端
Phone phone = new IPhoneFactory().Create();
phone.Call();

phone = new AndroidFactory().Create();
phone.Call();

簡(jiǎn)單工廠 VS 工廠方法

假設(shè)現(xiàn)在需要擴(kuò)展手機(jī)產(chǎn)品孝冒,增加鴻蒙OS手機(jī)

  • 簡(jiǎn)單工廠
  1. 增加具體手機(jī)類(lèi) HarmonyPhone
  2. 修改靜態(tài)工廠方法增加HarmonyPhone判斷(違反開(kāi)閉原則)
  • 工廠方法
  1. 增加具體手機(jī)類(lèi) HarmonyPhone
  2. 增加具體工廠類(lèi) HarmonyFactory

總結(jié)

工廠方法模式是典型的解耦框架,通過(guò)增加抽象工廠拟杉,客戶端與具體產(chǎn)品解耦庄涡,抽象工廠與具體產(chǎn)品解構(gòu)

符合迪米特法則,不需要知道具體產(chǎn)品如何構(gòu)造

符合依賴倒置原則搬设,只依賴產(chǎn)品類(lèi)的抽象

符合里氏替換原則穴店,父類(lèi)出現(xiàn)的地方都可以用子類(lèi)替換,因?yàn)闆](méi)有破壞繼承體系

當(dāng)然最重要復(fù)合開(kāi)閉原則拿穴,當(dāng)需要擴(kuò)展產(chǎn)品時(shí)泣洞,并不需要改動(dòng)原來(lái)代碼,只需增加新的具體產(chǎn)品類(lèi)默色,具體工廠類(lèi)


示例代碼 - Github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末球凰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腿宰,更是在濱河造成了極大的恐慌呕诉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吃度,死亡現(xiàn)場(chǎng)離奇詭異甩挫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)椿每,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)伊者,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人间护,你說(shuō)我怎么就攤上這事删壮。” “怎么了兑牡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵央碟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我均函,道長(zhǎng)亿虽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任苞也,我火速辦了婚禮洛勉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘如迟。我一直安慰自己收毫,他們只是感情好攻走,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著此再,像睡著了一般昔搂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上输拇,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天摘符,我揣著相機(jī)與錄音,去河邊找鬼策吠。 笑死逛裤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猴抹。 我是一名探鬼主播带族,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蟀给!你這毒婦竟也來(lái)了炉菲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坤溃,失蹤者是張志新(化名)和其女友劉穎拍霜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體薪介,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祠饺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汁政。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片道偷。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖记劈,靈堂內(nèi)的尸體忽然破棺而出勺鸦,到底是詐尸還是另有隱情,我是刑警寧澤目木,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布换途,位于F島的核電站,受9級(jí)特大地震影響刽射,放射性物質(zhì)發(fā)生泄漏军拟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一誓禁、第九天 我趴在偏房一處隱蔽的房頂上張望懈息。 院中可真熱鬧,春花似錦摹恰、人聲如沸辫继。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)姑宽。三九已至遣耍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間低千,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工馏颂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留示血,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓救拉,卻偏偏與公主長(zhǎng)得像难审,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亿絮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355