国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

簡(jiǎn)單工廠模式:提高代碼可維護(hù)性與擴(kuò)展性的設(shè)計(jì)模式

這篇具有很好參考價(jià)值的文章主要介紹了簡(jiǎn)單工廠模式:提高代碼可維護(hù)性與擴(kuò)展性的設(shè)計(jì)模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

哈嘍!今天開始,慢慢和大家一起分享我學(xué)習(xí)和理解設(shè)計(jì)模式的歷程。

前言

設(shè)計(jì)模式(Design Pattern)是前輩們對(duì)代碼開發(fā)經(jīng)驗(yàn)的總結(jié),是解決特定問題的一系列套路。它不是語法規(guī)定,而是一套用來提高代碼可復(fù)用性、可維護(hù)性、可讀性、穩(wěn)健性以及安全性的解決方案。

1995 年,GoF(Gang of Four,四人組/四人幫)合作出版了《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書,共收錄了 23 種設(shè)計(jì)模式,從此樹立了軟件設(shè)計(jì)模式領(lǐng)域的里程碑,人稱「GoF設(shè)計(jì)模式」。

讓我們從創(chuàng)建型模式開始。先來說說工廠模式!

基本介紹

工廠模式是一種創(chuàng)建型的面向?qū)ο笤O(shè)計(jì)模式,目的將創(chuàng)建對(duì)象的具體過程包裝起來,從而達(dá)到更高的靈活性。工廠模式的本質(zhì)就是用工廠方法代替 new 操作創(chuàng)建一種實(shí)例化對(duì)象的方式,以提供一種方便地創(chuàng)建有同種類型接口的產(chǎn)品的復(fù)雜對(duì)象。

簡(jiǎn)單說來:我們不new對(duì)象了,讓工廠方法來生產(chǎn)對(duì)象

工廠模式可以細(xì)分如下三類:

簡(jiǎn)單工廠模式(Simple Factory)

工廠方法模式(Factory Method)

抽象工廠模式(Abstract Factory)

今天來看下工廠模式之簡(jiǎn)單工廠模式

簡(jiǎn)單工廠模式

簡(jiǎn)單工廠模式(Simple Factory)又叫做靜態(tài)工廠方法(Static Factory Method)模式,但不屬于 23 種 GOF 設(shè)計(jì)模式之一。

簡(jiǎn)單工廠模式的實(shí)質(zhì)是由一個(gè)工廠類根據(jù)傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類(這些產(chǎn)品類繼承自一個(gè)父類或接口)的實(shí)例。

從上面的描述中,我們可以抽象出這么幾個(gè)角色:

  • 工廠類:負(fù)責(zé)創(chuàng)建需要的實(shí)例
  • 產(chǎn)品抽象類:工廠類能創(chuàng)建出來的所有產(chǎn)品類的抽象。它負(fù)責(zé)描述所有實(shí)例所共有的公共接口。(這里必須要一個(gè)抽象類,不然不能保證返回的不同的產(chǎn)品類屬于同一個(gè)類型)
  • 產(chǎn)品類:工廠類創(chuàng)建出來的目標(biāo)。它(們)是產(chǎn)品抽象類的具體實(shí)現(xiàn)。

示例

產(chǎn)品抽象類:

public interface Phone {
  public String info();
}

產(chǎn)品類(具體實(shí)現(xiàn)類):

public class HuaweiPhone implements Phone{
  @Override
  public String info() {
    return "我是手機(jī)華為";
  }
}
public class ApplePhone implements Phone{
  @Override
  public String info() {
    return "我是蘋果手機(jī)";
  }
}

工廠類

public class PhoneFactory{
  public static Phone createPhone(String name){
    Phone p = null;
    switch(type) {
      case "huawei":
        p = new HuaweiPhone();
        break;
      case "apple":
        p = new ApplePhone();
        break;
      default:
        throw new UnsupportedOperationException("不支持該操作");
    }
    return p;
  }
}

讓我們來測(cè)試下:

public class Test {
  public static void main(String[] args) {
    SimpleFactory PhoneFactory = new PhoneFactory();
 
    Phone phone1 = PhoneFactory.createPhone("huawei");
    System.out.println(phone1.info());
    Phone phone2 = PhoneFactory.createPhone("apple");
    System.out.println(phone2.info());
  }
}

輸出:

我是華為手機(jī)

我是蘋果手機(jī)

給什么條件,就創(chuàng)建什么類型的實(shí)例,就這么簡(jiǎn)單。不愧簡(jiǎn)單工廠模式的名號(hào)。

簡(jiǎn)單工廠模式存在的問題

上面的例子中,我們是知道該工廠能創(chuàng)建華為手機(jī)和蘋果手機(jī)。所有我們?cè)跍y(cè)試的時(shí)候,也只創(chuàng)建了這兩個(gè)實(shí)例。

如果現(xiàn)在要?jiǎng)?chuàng)建一個(gè)”小米手機(jī)“,那這個(gè)工廠就沒法創(chuàng)建出來了

小伙伴可能會(huì)說,那就在switch...case...中再增加一個(gè)case "xiaomi"吧!

嗯嗯,這個(gè)辦法能解決”小米手機(jī)“的創(chuàng)建問題。但如果后面我們還要陸續(xù)創(chuàng)建”oppo手機(jī)“”三星手機(jī)“...

如果延續(xù)這種方法,我們每增加一種手機(jī)的創(chuàng)建,就要添加一次case,也就要每次都修改 PhoneFactory 類。這顯然是違背了【開閉原則】。同時(shí),這樣的工廠類太被動(dòng)了。

那怎么解決這個(gè)問題呢?我們下期再分享。

簡(jiǎn)單工廠模式總結(jié)

工廠類是整個(gè)簡(jiǎn)單工廠模式的關(guān)鍵。包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類的對(duì)象。

通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對(duì)象的尷尬局面擺脫出來(不用直接new對(duì)象了),僅僅需要負(fù)責(zé)“消費(fèi)”對(duì)象就可以了。而不必管這些對(duì)象究竟如何創(chuàng)建及如何組織的。明確了各自的職責(zé)和權(quán)利,有利于整個(gè)軟件體系結(jié)構(gòu)的優(yōu)化。

但是由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。

當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時(shí)候,可能會(huì)出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實(shí)例的需求.這種對(duì)條件的判斷和對(duì)具體產(chǎn)品類型的判斷交錯(cuò)在一起,很難避免模塊功能的蔓延,對(duì)系統(tǒng)的維護(hù)和擴(kuò)展非常不利;

一句話:雖然簡(jiǎn)單工廠模式實(shí)現(xiàn)了對(duì)象的創(chuàng)建和對(duì)象的使用分離,但增加新的具體產(chǎn)品需要修改工廠類的判斷邏輯代碼,違背開閉原則

為了解決這些缺點(diǎn),就有了工廠方法模式。

我下回再講工廠方法,今天先到這里了!文章來源地址http://www.zghlxwxcb.cn/news/detail-501331.html

到了這里,關(guān)于簡(jiǎn)單工廠模式:提高代碼可維護(hù)性與擴(kuò)展性的設(shè)計(jì)模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包