簡(jiǎn)單工廠模式

工廠模式定義:一個(gè)創(chuàng)建產(chǎn)品對(duì)象的工廠接口啦粹,將產(chǎn)品對(duì)象的實(shí)際創(chuàng)建工作推遲到具體工廠類當(dāng)中肺樟。這滿足創(chuàng)建型模式中所要求的“創(chuàng)建與使用分離”的特點(diǎn)。

按實(shí)際業(yè)務(wù)場(chǎng)景劃分顽聂,工廠模式有 3 種不同的實(shí)現(xiàn)方式肥惭,分別是簡(jiǎn)單工廠模式盯仪、工廠方法模式和抽象工廠模式。
我們把被創(chuàng)建的對(duì)象稱為“產(chǎn)品”蜜葱,把創(chuàng)建產(chǎn)品的對(duì)象稱之為“工廠”全景。如果要?jiǎng)?chuàng)建的產(chǎn)品不對(duì),只要一個(gè)工廠類就可以完成牵囤,這種模式叫“簡(jiǎn)單工廠模式”爸黄。
簡(jiǎn)單工廠模式種創(chuàng)建實(shí)例的方法通常為靜態(tài)(static)方法,因此簡(jiǎn)單工廠模式(Simple Factory Pattern)又叫做靜態(tài)工廠方法模式(Static Factory Method Pattern)揭鳞。
簡(jiǎn)單工廠模式又一個(gè)具體的工廠類馆纳,可以生成多個(gè)不同的產(chǎn)品,屬于創(chuàng)建型設(shè)計(jì)模式汹桦,但是不在 GoF 23 種設(shè)計(jì)模式之列鲁驶。

適用場(chǎng)景

  • 工廠類負(fù)責(zé)創(chuàng)建的對(duì)象比較少
  • 客戶端(應(yīng)用層)只知道傳入工廠類的參數(shù),對(duì)于創(chuàng)建對(duì)象(邏輯)不關(guān)心

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

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

  • 工廠類必須包含必要的邏輯判斷舞骆,可以決定在什么時(shí)候創(chuàng)建哪一個(gè)產(chǎn)品實(shí)例钥弯。客戶端可以免除直接創(chuàng)建產(chǎn)品對(duì)象的職責(zé)督禽,很方便的創(chuàng)建出相應(yīng)的產(chǎn)品脆霎。工廠和產(chǎn)品的職責(zé)區(qū)分明確;
  • 客戶端無需知道所創(chuàng)建具體產(chǎn)品的類名狈惫,只需要知道參數(shù)即可睛蛛;
  • 可以引入配置文件,在不修改客戶端代碼的情況下更換和添加新的具體產(chǎn)品類胧谈。

缺點(diǎn):

  • 簡(jiǎn)單工廠模式的工廠類單一忆肾,負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,職責(zé)過重菱肖,一旦異常客冈,可能整個(gè)系統(tǒng)受到影響。且工廠類代碼會(huì)非常臃腫稳强,違背高聚合原則场仲;
  • 使用簡(jiǎn)單工廠模式會(huì)增加系統(tǒng)中類的個(gè)數(shù)(引入新的工廠類),增加系統(tǒng)的復(fù)雜度和理解難度退疫;
  • 系統(tǒng)擴(kuò)展困難渠缕,一旦增加新產(chǎn)品不得不修改工廠邏輯,在產(chǎn)品類型較多時(shí)褒繁,可能造成邏輯過于復(fù)雜亦鳞;
  • 使用 static 工廠方法,造成工廠角色無法形成基于繼承的等級(jí)結(jié)構(gòu)。

模式結(jié)構(gòu)與實(shí)現(xiàn)

簡(jiǎn)單工廠模式的主要角色如下:

  • 簡(jiǎn)單工廠(Simple Factory):負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯蚜迅。工廠類的創(chuàng)建產(chǎn)品類的方法可以被外界直接調(diào)用舵匾,創(chuàng)建所需的產(chǎn)品對(duì)象;
  • 抽象產(chǎn)品(Product):是簡(jiǎn)單工廠創(chuàng)建的所有對(duì)象的父類谁不,負(fù)責(zé)描述所有實(shí)例共有的公共接口坐梯;
  • 具體產(chǎn)品(Concrete Product):是簡(jiǎn)單工廠模式的創(chuàng)建目標(biāo)。


    簡(jiǎn)單工廠模式結(jié)構(gòu)圖
簡(jiǎn)單工廠模式結(jié)構(gòu)圖

代碼實(shí)現(xiàn):

public interface Product {
  void produce();
}

public class ConcreateProductA implements Product {
  @Override
  public void produce() {
    System.out.println("produce product A....");
  }
}

public class ConcreateProductB implements Product {
  @Override
  public void produce() {
    System.out.println("produce product B...");
  }
}

public class SimpleFactory {
  public static Product makeProduct(String type) {
    if ("A".equalsIgnoreCase(type)) {
      return new ConcreateProductA();
    } else if ("B".equalsIgnoreCase(type)) {
      return new ConcreateProductB();
    }
    return null;
  }
}

public class Main {
  public static void main(String[] args) {
    Product product = SimpleFactory.makeProduct("A");
    if (product != null) {
      product.produce();
    }
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刹帕,一起剝皮案震驚了整個(gè)濱河市吵血,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偷溺,老刑警劉巖蹋辅,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異挫掏,居然都是意外死亡侦另,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門尉共,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褒傅,“玉大人,你說我怎么就攤上這事袄友〉钔校” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵剧蚣,是天一觀的道長(zhǎng)支竹。 經(jīng)常有香客問我,道長(zhǎng)鸠按,這世上最難降的妖魔是什么礼搁? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮待诅,結(jié)果婚禮上叹坦,老公的妹妹穿的比我還像新娘熊镣。我一直安慰自己卑雁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布绪囱。 她就那樣靜靜地躺著测蹲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鬼吵。 梳的紋絲不亂的頭發(fā)上扣甲,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼琉挖。 笑死启泣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的示辈。 我是一名探鬼主播寥茫,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼矾麻!你這毒婦竟也來了纱耻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤险耀,失蹤者是張志新(化名)和其女友劉穎弄喘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甩牺,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蘑志,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贬派。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卖漫。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赠群,靈堂內(nèi)的尸體忽然破棺而出羊始,到底是詐尸還是另有隱情,我是刑警寧澤查描,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布突委,位于F島的核電站,受9級(jí)特大地震影響冬三,放射性物質(zhì)發(fā)生泄漏匀油。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一勾笆、第九天 我趴在偏房一處隱蔽的房頂上張望敌蚜。 院中可真熱鬧,春花似錦窝爪、人聲如沸弛车。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纷跛。三九已至,卻和暖如春邀杏,著一層夾襖步出監(jiān)牢的瞬間贫奠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唤崭,地道東北人拷恨。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谢肾,于是被迫代替她去往敵國(guó)和親挑随。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

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