設計模式學習 工廠模式

2021-06-20 09:42:19 字數 1262 閱讀 1574

工廠模式是較常見的一種設計模式

一:基本特點:

工廠模式可分為簡單工廠模式,工廠模式和抽象工廠模式,它們的思路和實現都很相似. 基本特點為至少包括以下三個類:

工廠類: 用new操作符建立各種產品類

抽象產品類: 各產品類的基類, 定義了產品的介面,

具體產品類: 抽象產品類的子類, 包含了具體實現

使用者在使用時通過工廠類生成符合要求的產品物件,並賦給乙個抽象產品類的指標. 通過多型自動呼叫正確的介面函式

二:主要思想

無論是那種工廠模式,其中心思想都是將業務邏輯與底層實現進行解耦. 

舉個例子, 乙個**需要連線資料庫, 那麼如何建表,查表這些是業務邏輯, 而用mysql還是sql_server則是具體實現. 不用工廠模式的情況下兩者是交叉出現的. 而我們想要的理想狀態是: 當我們需要換一種資料庫的時候不需要關心複雜的業務邏輯, 同樣當我們寫業務邏輯時也不需要知道底層如何實現,只要呼叫相應介面即可.

工廠模式利用物件導向的多型特性很好地解決了這個問題. 乙個簡單的實現如下:(簡單工廠模式)

//工廠類

class dbfactory

}; //抽象產品類

class dbbase

//具體產品類

class mysqldb: public dbbase

int select(......)

};class sql_serverdb: public dbbase

int select(......)

};//使用者呼叫

;

這樣,當改變資料庫的時候就不必與複雜的業務邏輯打交道了,同理做業務邏輯時也不必關心底層的實現.

三,幾種工廠模式的區別

前面說過工廠模式可分為簡單工廠模式,工廠模式和抽象工廠模式(也有把簡單工廠歸為工廠模式的), 它們之間大同小異,無非是將判斷邏輯放在不同地方而已(好吧,更深的原因我不懂).  

簡單工廠模式將判斷邏輯直接放在生產方法create裡,通過傳入的引數進行區分

工廠模式將工廠類派生出幾個不同的子工廠類,通過呼叫不同的工廠類進行區分, 相比於簡單工廠好處是增加新的產品時不需要修改原來的工廠**了,缺點是會多出好多任務廠類來

抽象工廠模式應用於更複雜的場景當中, 乙個工廠可以生產一系列不同但是相關的產品(學名產品族), 

就實際應用來說,越簡單的越好用,大部分情況簡單工廠模式就可以解決問題了.

設計模式學習(工廠模式)

這裡說的工廠模式是簡單工廠模式和抽象工廠模式,兩者有一定的區別,也有共同之處。上述過程是開閉原則的乙個典型體現。在下圖的例子中,factory類依賴具體物件的抽象來建立具體的物件 dell,sony 這乙個過程帶來的好處就是實現了factory類與具體產品之間的解耦合。客戶端可以自由的通過facto...

設計模式 工廠模式(學習)

在程式的世界裡,就像射鵰英雄傳一樣,我們的技能就像是武功一樣,我們只有不斷去學習練習才能有機會像郭靖一樣成為 天下第一 我認為技能和武功是很類似的,也有外功和內功,武俠之內功好比是我們技能演算法 武俠的外功好比是我們技能中某一語言的語法 武功秘籍好比是我們每種語言都有api和文件 武俠的勤加練習好比...

設計模式學習 工廠模式

工廠模式 常用的工廠模式包括三種 簡單工廠 普通工廠以及抽象工廠模式。1 簡單工廠模式 package com.demo.factory 介面類 public inte ce shapepackage com.demo.factory public class circle implements s...