1. 程式人生 > >【設計模式】-工廠三兄弟

【設計模式】-工廠三兄弟

前言

   學習了建立型的模式之後,發現有三個兄弟,及其相似,可以說它們三個是一個迭代的過程、不斷升級的過程,那就來仔細的瞭解一下他們的各個的優點吧。

簡單工廠模式

   簡單工廠模式就是把一些相似的東西拿出來,進行抽象,比如書上的例子,加減乘除,我們定義一個工廠類,他的作用就是根據客戶傳來的不同的指令來返回一個相應的演算法。下面是簡單工廠的結構圖:
這裡寫圖片描述

優點

   方便擴充套件演算法,假如在增加一個演算法,只需要增加一個子類繼承簡單運算類即可,客戶端不知道工廠裡具體的細節,只要給出相關指令,工廠就能馬上給出相應的演算法,增加了系統的靈活性。這樣將物件建立和使用分離

缺點

   如上面結構圖所示(紅框的位置),在進行擴充套件的時候,我們要更改工廠函式裡面的那個分支語句Switch,這樣便破壞了封裝性。不符合開閉原則。如果工廠的職責過多,邏輯複雜,不利於系統擴充套件和維護,使系統受到影響。

工廠方法模式

定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使一個類的例項化延遲到其子類。下面是工廠方法模式的結構圖:
這裡寫圖片描述
   根據簡單工廠模式的例子,用工廠方法模式來表示,結構圖如下:
這裡寫圖片描述

優點

   兩個圖作比較,可見工廠方法模式把演算法實體的建立放到了工廠的子類中。符合開閉原則,新增一種產品時,只需要增加相應的具體產品類和相應的工廠子類即可。符合單一職責原則,每個具體工廠類只負責建立對應的產品。工廠模式可以說是簡單工廠模式的進一步抽象和拓展,在保留了簡單工廠的封裝優點的同時,讓擴充套件變得簡單,讓繼承變得可行,增加了多型性的體現。

缺點

   新增新的演算法時,除了增加新產品類外,還要提供與之對應的集體工廠類,系統類的個數成對增加,增加了系統的複雜性,不便於維護。

抽象工廠模式

   提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。下面是抽象工廠的結構圖:
這裡寫圖片描述

優點

   用抽象工廠模式和工廠方法模式、簡單工廠模式作比較,簡單工廠模式,不符合開閉原則,而工廠方法模式正好彌補了簡單工廠的缺陷,但是當擴充套件一種方法時,需要增加兩個類,及其浪費資源,而抽象工廠模式正好彌補了工廠方法的缺點,如果我們增加一個演算法時,只需要增加一個工廠類就可以。

缺點

   抽象工廠模式很難支援新種類產品的變化。這是因為抽象工廠介面中已經確定了可以被建立的產品集合,如果需要新增新產品,此時就必須去修改抽象工廠的介面,這樣就涉及到抽象工廠類的以及所有子類的改變,這樣也就違背了開閉原則。

總結

   通過三個工廠比較,讓我更深入的瞭解了他們的優缺點,這樣對比的學習方法很不錯,不斷總結讓知識顆粒歸倉。

相關推薦

設計模式-工廠兄弟

前言    學習了建立型的模式之後,發現有三個兄弟,及其相似,可以說它們三個是一個迭代的過程、不斷升級的過程,那就來仔細的瞭解一下他們的各個的優點吧。 簡單工廠模式    簡單工廠模式就是把一些相似的東西拿出來,進行抽象,比如書上的例子,加減乘除,我們定義

設計模式工廠兄弟

前言 今天給大家帶來滿滿乾貨,不僅有工廠三兄弟,還有面向物件和麵向過程的思想,以及介面和抽象類區別,希望大家認真閱讀,滿載而歸! 簡介 工廠設計模式使用常用而且常見的面向物件設計模式,它一共有三種: 簡單工廠 工廠 抽象工廠 這是由簡單到複雜的順序

設計模式工廠兄弟(卷二)

0x00 為什麼需要工廠模式 使用工廠模式的目的是使得物件的建立和使用分離。一個物件的職責有三種,物件本身所具有的職責,建立物件的職責,使用物件的職責。 0x01 簡單工廠模式 是其他兩個工廠模式的基礎。 簡單工廠定義:根據引數的不

設計模式工廠模式(Factory Pattern)

什麽 接口 運行 不同 int 情況 att 不知道 local 【前言】 很多時候我們編寫了好幾個接口的實現類,這些實現類分別有不同特性,用在不同的情景下。**而我們對於這些實現類,也往往不會對外暴露內部增加的方法,只希望外部調用接口的方法,在這種情況下,我們沒必要讓調用

設計模式工廠模式

工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的物件。 簡單工廠也稱為靜態工廠,一般可以用靜態方法(類方法)

設計模式單例模式工廠模式

interface IFactory { Operation CreateOperation(); } class AddFactory : IFactory { public Operation CreateOperation()

設計模式簡單工廠模式工廠方法模式

產生 for plm nbsp osc rbm play stp mage > 簡單工廠模式 顧名思義,此模式的設計結構是簡單的,核心是生產對象。 一般來說,運用工廠模式生產的對象應該是構建對象的過程比較復雜的,獲取構建對象的過程在日後可能發生變更的。 簡單工廠

設計模式簡單工廠模式

jsb 工廠模式 tle virt -m 虛函數 ios efault def 以面向對象的思想和簡單工廠模式。寫一個C++計算器程序,代碼例如以下: #include <iostream> using namespace std;

設計模式2.工廠設計模式(生產者消費者問題)

catch 設計 star 機制 print boolean 結果 try producer 生產者消費者模型 與 多線程 生產者、消費者在同一時間內共用同一存儲空間, 生產者向共享空間生產數據, 而消費者取走共享的數據。、 經典問題描述: 生產者不斷交替地生產兩組數據“姓

設計模式 抽象工廠模式 Abstract Factory Pattern

輸出結果 決定 操作 靜態工廠模式 void inter excel erp fault 簡單工廠模式是一個工廠類根據工廠方法的參數創建不出不同的產品, 工廠方法模式是每一個產品都有一個一一對應的工廠負責創建該產品。那麽今天要講的抽象工廠模式是一個工廠能夠產生關聯的一系列產

設計模式簡單工廠模式 |工廠方法模式 |抽象工廠模式

簡單工廠模式 由三種角色組成: 1、工廠類角色:是簡單工廠模式的核心,含有一定的商業邏輯和判斷邏輯。 2、抽象產品角色:一般是具體產品繼承的父類或者實現的介面。 3、具體產品角色:工廠類所建立的物件就是此角色的例項。 用一個單獨的類來做這個創在例項的過程,這就

JavaScript筆記設計模式-工廠模式

簡單工廠模式是由一個方法來決定到底要建立哪個類的例項, 而這些例項經常都擁有相同的介面. 這種模式主要用在所例項化的型別在編譯期並不能確定, 而是在執行期決定的情況。 說的通俗點,就像公司茶水間的飲料機,要咖啡還是牛奶取決於你按哪個按鈕。 var Car = (function () { v

設計模式-建立型模式-工廠模式工廠兄弟

設計模式-建立型模式-工廠模式(工廠三兄弟) 工廠模式分為簡單工廠,工廠方法,抽象工廠。 簡單工廠模式 一個介面,三個具體類,一個工廠,通過選擇,生產出對應的物件。 package demo2; public class Circle implements Shape{ public Circ

PHP-設計模式工廠模式

author:咔咔 WeChat:fangkangfk   我這裡就不在去說那些專業術語了,我自己看著都迷糊。 其實可以想想平時自己的業務場景,加入我們的專案有多中支付方式。我之前的寫法就是倆個控制器,點選哪個走哪個方法,這樣也是可以實現的。但是現在有一個很nice的方

設計模式-建立型模式-工廠模式工廠兄弟) TypeScript

設計模式-建立型模式-工廠模式(工廠三兄弟) TypeScript 簡單工廠模式 定義一個介面,三個具體類。然後書寫如下,通過選擇,生產出相應的物件 // 定義Shape介面 interface Shape { draw():void; } // 下面為產品類 // 產品 Circle cla

設計模式簡單工廠模式(Simple Factory)

思想 簡單工廠模式,因為用於建立例項的方法是靜態的,又稱為靜態工廠方法模式。在該模式中,可以根據引數的不同返回不同類的例項。簡單工廠模式專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有相同的父類。 結構 組成(角色) 作用

設計模式()-附錄A:方法過載

概念 方法過載是指在一個類中定義多個同名的方法,但要求每個具有不同的引數或引數的個數。 我們可以理解為方法過載可在不改變原方法的基礎上,新增功能。方法過載算是提供了函式可擴充套件的能力。 注意事項 1.並不是只有構造方法可以過載,普通方法也是可以過載的。 2.方法過載時,兩個方法

設計模式(一)-簡單工廠模式和策略模式

前言 最近開始和春哥,張鐸 ,銀平討論設計模式,成立了一個小菜變大鳥的小組,每天討論一個模式,並且把這個模式搞懂,每學一個新的模式,再回顧一下之前學的模式。這兩天學了簡單工廠模式和策略模式,發現兩個模式有很多相同之處,下面用商場促銷的例子來對兩個模式總結一下。 簡單工廠模式 1.

設計模式——抽象工廠模式

【抽象工廠模式】 抽象工廠模式是圍繞一個超級工廠建立其他工廠,該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模型,它提供了一種建立物件的最佳方式 在抽象工廠模式中,介面是負責建立一個相關物件的工廠,不需要顯式的指定他們的類。每個生成的工廠都能按照工廠模式

設計模式MVC模式層架構關係

前言 對於許多新手都不明白MVC模式和三層架構的關係,本人也是,特地整合了網上的一些文章對MVC模式和三層架構的關係進行介紹,希望對大家有幫助。 關於三層架構 在軟體體系架構設計中,分層式結構是最常見,也是最重要的一種結構。微軟推薦的分層式結構一般分為三層,從下