工廠模式

介紹

這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式空执。
在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯,并且是通過使用一個共同的接口來指向新創(chuàng)建的對象洛波。

優(yōu)點

1、一個調(diào)用者想創(chuàng)建一個對象骚露,只要知道其名稱就可以了蹬挤。
2、擴展性高棘幸,如果想增加一個產(chǎn)品焰扳,只要擴展一個工廠類就可以。
3误续、屏蔽產(chǎn)品的具體實現(xiàn)吨悍,調(diào)用者只關(guān)心產(chǎn)品的接口。

缺點

每次增加一個產(chǎn)品時蹋嵌,都需要增加一個具體類和對象實現(xiàn)工廠育瓜,使得系統(tǒng)中類的個數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復雜度栽烂,同時也增加了系統(tǒng)具體類的依賴爆雹。這并不是什么好事。

注意

作為一種創(chuàng)建類模式愕鼓,在任何需要生成復雜對象的地方,都可以使用工廠方法模式慧起。有一點需要注意的地方就是復雜對象適合使用工廠模式菇晃,而簡單對象,特別是只需要通過 new 就可以完成創(chuàng)建的對象蚓挤,無需使用工廠模式磺送。如果使用工廠模式,就需要引入一個工廠類灿意,會增加系統(tǒng)的復雜度估灿。

代碼實現(xiàn)(php)

<?php
/**
 * 簡單工廠
 * User: ningsiy
 */


/**
 * 定義電腦接口
 * Interface Computer
 */
interface Computer
{
    public function createComputer();
}

/**
 * Class Dell
 * 實現(xiàn)電腦接口 (戴爾電腦制造商)
 */
class Dell implements Computer
{
    public function createComputer()
    {
        echo '戴爾筆記本<br/>';
    }
}

/**
 * Class Asus
 * 實現(xiàn)電腦接口 (華碩電腦制造商)
 */
class Asus implements Computer
{
    public function createComputer()
    {
        echo '華碩筆記本<br/>';
    }
}

/**
 * Class SimpleFactory
 * 簡單工廠類
 */
class SimpleFactory
{
    public static function buy_dell(){
        return new Dell();
    }

    public static function buy_asus(){
        return new Asus();
    }
}

$dell = SimpleFactory::buy_dell();
$asus = SimpleFactory::buy_asus();
$dell->createComputer();
$asus->createComputer();

運行結(jié)果

python實現(xiàn)

# 簡單工廠  ningsiy


class Php:
    def __init__(self, lan):
        self.lan = lan

    def say(self):
        return self.lan + ' 實現(xiàn)簡單工廠模式。'


class Java:
    def __init__(self, lan):
        self.lan = lan

    def say(self):
        return self.lan + ' 實現(xiàn)簡單工廠模式缤剧。'


class Python:
    def __init__(self, lan):
        self.lan = lan

    def say(self):
        return self.lan + ' 實現(xiàn)簡單工廠模式馅袁。'


class UnknowLan:
    def say(self):
        return '操作錯誤!'


class Factory:
    def __init__(self, language):
        self.language = language

    def get_say(self):
        if self.language == 'php':
            return Php(self.language)

        elif self.language == 'python':
            return Python(self.language)

        elif self.language == 'java':
            return Java(self.language)

        else:
            return UnknowLan()


def test_fac():
    lan = input('請輸入編程語言:')
    fac = Factory(lan)
    get_say = fac.get_say()
    say = get_say.say()
    print(say)


test_fac()

運行結(jié)果

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荒辕,一起剝皮案震驚了整個濱河市汗销,隨后出現(xiàn)的幾起案子犹褒,更是在濱河造成了極大的恐慌,老刑警劉巖弛针,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叠骑,死亡現(xiàn)場離奇詭異,居然都是意外死亡削茁,警方通過查閱死者的電腦和手機宙枷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茧跋,“玉大人慰丛,你說我怎么就攤上這事⊙嵯危” “怎么了璧帝?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長富寿。 經(jīng)常有香客問我睬隶,道長,這世上最難降的妖魔是什么页徐? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任苏潜,我火速辦了婚禮,結(jié)果婚禮上变勇,老公的妹妹穿的比我還像新娘恤左。我一直安慰自己,他們只是感情好搀绣,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布飞袋。 她就那樣靜靜地躺著,像睡著了一般链患。 火紅的嫁衣襯著肌膚如雪巧鸭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天麻捻,我揣著相機與錄音纲仍,去河邊找鬼。 笑死贸毕,一個胖子當著我的面吹牛郑叠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播明棍,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乡革,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起署拟,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤婉宰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后推穷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體心包,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年馒铃,在試婚紗的時候發(fā)現(xiàn)自己被綠了蟹腾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡区宇,死狀恐怖娃殖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情议谷,我是刑警寧澤炉爆,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站卧晓,受9級特大地震影響芬首,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逼裆,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一郁稍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胜宇,春花似錦耀怜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至从诲,卻和暖如春狈究,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盏求。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亿眠,地道東北人碎罚。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像纳像,于是被迫代替她去往敵國和親荆烈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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

  • 設計模式概述 在學習面向?qū)ο笃叽笤O計原則時需要注意以下幾點:a) 高內(nèi)聚、低耦合和單一職能的“沖突”實際上憔购,這兩者...
    彥幀閱讀 3,747評論 0 14
  • 工廠模式是我們最常用的實例化對象模式了宫峦,是用工廠方法代替new操作的一種模式。通常我們所說的工廠模式是指工廠方法模...
    zfylin閱讀 1,314評論 0 7
  • 我受過一些傷在我還小的時候他們不經(jīng)過問撕開我的偽裝于是我穿上更厚的衣裳走過人間荒涼 我那樣堅強背著行囊四處流浪他們...
    我的艾達閱讀 166評論 1 1
  • 記住的部分 3個石匠玫鸟,養(yǎng)家糊口导绷,數(shù)一數(shù)二,大教堂 中年危機屎飘,目標喪失妥曲,目標未達成放棄 100年后孫子的孫子提起來的...
    一點點先生閱讀 257評論 0 0
  • 1 小卿跟老公結(jié)婚五年了檐盟。 五年里充滿了各種爭斗吵鬧。 按照心理學的說法押桃,老公的原生家庭問題不少葵萎,導致他的性格有著...
    唐紫煙閱讀 2,462評論 0 2