① 工廠模式,簡單工廠模式,抽象工廠模式 三者有什麼區別
工廠模式的好處就在於將工廠和產品之間的耦合降低,將具體產品的構造過程放在了具體工廠類裡面。在以後擴展產品的時候方便很多,只需要添加一個工廠類,一個產品類,就能方便的添加產品,而不需要修改原有的代碼。而在簡單工廠中,如果要增加一個產品,則需要修改工廠類,增加if/else分支,或者增加一個case分支,工廠模式符合軟體開發中的OCP原則(open close principle),對擴展開放,對修改關閉。
抽象工廠模式:這個模式我總是感覺和builder模式非常相似。
工廠方法模式提供的是對一個產品的等級模式,,而抽象工廠方法提供的是對多個產品的等級模式,注意,這里的多個具體產品之間是相互耦合的,也就是說這里的抽象工廠提供的產品之間是存在某種聯系的。
有人做如下的比較:
工廠方法模式:一個抽象產品類,可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類只能創建一個具體產品類的實例。
抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類可以創建多個具體產品類的實例。
區別:工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。
下面是一個形象的比喻:
無論是簡單工廠模式、工廠模式還是抽象工廠模式,它們本質上都是將不變的部分提取出來,將可變的部分留作介面,以達到最大程度上的復用。拿一個生產水杯(cup)的工廠舉例:起初,不用工廠模式,我必須在生產水杯之前知道水杯的材料和形狀等水杯的所有特徵才能生產,這就是我們的new Cup();這個Cup必須是具體的。廠主發現同一形狀的被子,只是材料不同,如一個是玻璃(glass)的,一個是瓷(china)的,但是確要兩條生產線,顯然有資源浪費的嫌疑。現在廠主生產杯子時先不讓生產線知道我要產的是玻璃的還是瓷的,而是讓它在不知道具體材料的情況下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形狀的具體杯子了。但是很可惜,java並不能new一個抽象的Cup,所以就有了簡單工廠模式。原來是Cup cup=new Cup;現在是SimpleCupFactory.createCup(String cupName),根據cup的名字生產Cup,而createCup返回的是一個實現了 Cup介面或抽象類的具體Cup。簡單抽象工廠模式有一個問題,就是當我現在想生產一個同樣形狀的鐵杯時,工廠里並沒有定義相應的處理流程,只能更改createCup方法,這就不合理了。我現在只是想生產鐵杯,你只要在最後的時候把玻璃原料換成鐵的不就行了嗎,幹嘛還要更改整條生產線呢?於是就有了工廠模式。原來生產線在生產模具的時候還要考慮是為玻璃杯生產的模具還是為鐵杯生產的模具,現在它不用管了。CupFactory.createCup()創建Cup.CupFactory是介面或抽象類。實現它的具體子類會創建符合Cup介面的具體Cup。那麼現在廠主想要生產水壺(kettle),用工廠模式就不得不再造一條水壺生產線,能不能在水杯生產線同時生產水壺呢?這就是抽象工廠模式。
② 簡單工廠模式,工廠方法模式和抽象工廠模式有何區別
工廠方法模式:
一個抽象產品類,可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類只能創建一個具體產品類的實例。
抽象工廠模式:
多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類可以創建多個具體產品類的實例。
區別:
工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。
③ Python設計模式:工廠方法模式
工廠,大家一般能想到的是生產產品的地方, 在設計模式中,工廠可分為:簡單工廠模式、工廠方法模式。 在前期推文 Python 簡單工廠模式 中有關於簡單工廠模式的解讀。
根據工廠的抽象程度可分為:工廠方法模式、抽象工廠模式。 該模式用於封裝和管理對象的創建,是一種創建型模式。
在簡單工廠模式中,只提供了一個工廠類,該工廠類處於對產品類進行實例化的中心位置,它知道每一個產品對象的創建細節,並決定何時實例化哪一個產品類。
簡單工廠模式最大的缺點是:當有新產品要加入到系統中時,必須修改工廠類,加入必要的處理邏輯,這違背了「開閉原則」。
在簡單工廠模式中,所有的產品都是由同一個工廠創建,工廠類職責較重,業務邏輯較為復賀型雜,具體產品與工廠類之間的耦合度高,嚴重影響了系統的靈活性和擴展性,而工廠方法模式則可以很好地解決這一問題。因此工廠方法模式應運而生。
(1)、工廠方法模式定義一個用於創建對象的介面,但是工廠本身並不負責創建對象,而是讓子類決定將哪一個類實例化。工廠方法模式讓一個類的實例化延遲到其子類。 工廠方法的創建是通過繼承而不是通過實例化來完成的。
(2)、工廠方法模式就是簡單工廠模式的進一步抽象。由於面向對象多態性,工廠方法模式保持了簡單工廠的優點同時克服了它的缺點。工廠方法模式中,核心的工廠被提升為一個抽象類,將具體的創建工作交給他的子類完成。
這個抽象的工廠類僅規定具體工廠實現的介面,而不明確指出如何實例化一個產品類,這使得工廠方法模式允許系統在不修改原有產品結構的情況下輕松的引進新產品。
工廠方法使設計更加具有可定製性,它可以返回相同的實例或子類,而不是某種類型的對象。
前期分享的 Python 簡單工廠模式 和今天分享的Python 工廠方法模式,大家在實際應用時能解決問題滿足需求即可,可靈活變通,自由選擇,無所謂哪種設計模式更高級。衫攜
同時無論哪種設計模式,由於可能封裝了大量禪塌猜對象和工廠創建,當有新加入產品的需求時,需要修改已定義好的工廠相關的類,因此對於產品和工廠的擴展性不太友好,在選擇使用時利弊需要權衡一下。
④ 工廠模式,簡單工廠模式,抽象工廠模式三者有什麼區別
工廠模式,簡單工廠模式,抽象工廠模式三者區別如下:
1、首先,三者的創建對象是不相同的。
進行創建對象時,「工廠模式」不使用new創建對象,而是使用Factory模式;「簡單工廠模式」則是通過fw模式來建立對象;「抽象工廠模式」使用迭代模式來創建對象。
(4)簡單工廠和工廠方法擴展閱讀:
簡單工廠模式優缺點
1、優點:
工廠類含有必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅"消費"產品。簡單工廠模式通過這種做法實現了對責任的分割。
當產品有復雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
2、缺點:
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於復雜,違背了"開放--封閉"原則(OCP)。另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。
⑤ 工廠模式,簡單工廠模式,抽象工廠模式三者有什麼區別
工廠模式,簡單工廠模式,抽象工廠模式三者區別如下:
1、首先,三者的創建稿跡對象是不相同的。
進行創建對象時,「工廠模式」不使用new創建對象,而是使用Factory模式;「簡單工廠模式」則是通過fw模式來建立對象;「抽象工廠模式」使用迭代模式來創建對象。
(5)簡單工廠和工廠方法擴展閱讀:
簡單工廠模式優缺點
1、優點:
工廠類含有必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅"消費"產品。簡單工廠模式通過這種做法實現了對責任的分割。
當產品有復雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
2、缺點:
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於復雜,違背了"開放--封閉"原則(OCP)。另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。