上面的場景其實蘊含著我們常見的設計模式思維方式,code is cheap,**來了。
一:簡單工廠
using
system;
//ms的產品
public
class
software
set}
public
string
getsoftwarename()}//
ms的產品:office
public
class
office:software}//
ms的產品:msn
public
class
msn : software
}///
///簡單工廠
///public
class
mssoftwarefactory
return
mssoftware;}}
//////
客戶端呼叫
///public
class
client }
上面的簡單工廠在乙個方法體中有個switch...case,違背了「對擴充套件開放,對修改封閉」的原則,即「開放-封閉原則」。下面的工廠方法就克服了簡單工廠的缺點,降低了客戶端程式和產品物件的耦合。
二:工廠方法
定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。
using
system;
//ms的產品
public
class
software
set}
public
virtual
string
getsoftwarename()}//
ms的產品:office
public
class
office:software}//
ms的產品:msn
public
class
msn : software
}inte***ce
isoftwarefactory
//////
office工廠
///public
class
officefactory:isoftwarefactory
}///
///msn工廠
///public
class
msnfactory : isoftwarefactory
}///
///客戶端呼叫
///public
class
client }
工廠方法的缺點是每加乙個產品,就要建立乙個對應的產品工廠類,增加了額外的開發量。
三、抽象工廠
提供乙個建立一系列相關或者相互依賴物件的介面,而無需指定它們具體的類。
抽象工廠最經典的應用莫過於資料庫訪問程式。網上有很多這方面的討論。不多說了。這裡我繼續用開篇講的場景來描述。
我們知道office和msn根據作業系統的不同可以分為windows版本的和mac版本的,也許還有linux,unix版本的,歸根結底,這裡的產品涉及到產品系列的問題,抽象工廠可以解決這個問題:
using
system;
//ms的產品:office
public
class
office
set}
}public
inte***ce
ioffice
//ms的windows版本office
public
class
winoffice : ioffice}//
ms的macintosh版本office
public
class
macoffice : ioffice}//
ms的產品:msn
public
class
msn
set}
}public
inte***ce
imsn
//ms的windows版本msn
public
class
winmsn:imsn}//
ms的macintosh版本msn
public
class
macmsn : imsn
}inte***ce
isoftwarefactory
//////
windows版本的工廠
///public
class
windowsfactory:isoftwarefactory
public
imsn createmsn()
}///
///macintosh版本的工廠
///public
class
macfactory : isoftwarefactory
public
imsn createmsn()
}///
///客戶端呼叫
///public
class
client }
簡單工廠和工廠方法
當我們在實際開發的過程中,經常會用到new這個關鍵字,需要用到什麼類,就new什麼類,非常的方便,但是我們在享受這種便利的同時,這種便利也給我們帶來了一些麻煩 於是我們引入了簡單工廠來解耦 先假設以下情景,假如你有一家飲品店,使用者要自己點飲料 我們先看看如果不用工廠模式我們該怎麼實現這個需求,下面...
簡單工廠和工廠方法
這學期開始開設設計模式這門課,剛開始一直理解不了什麼是簡單工廠什麼是工廠方法,就在自己敲完 後頓悟!工廠方式不在工廠類中進行邏輯判斷,程式可以為不同產品類提供不同的工廠,不同的工廠類和產不同的產品。當使用工廠方法設計模式時,物件呼叫者需要與具體的工廠類耦合 下面來看看兩者的直觀區別 簡單工廠 工廠方...
簡單工廠方法,工廠方法,抽象工廠方法
以大話設計模式計算器為例 簡單工廠方法是由具體執行功能類,工廠類,客戶端構成,工廠類有case語句,負責建立不同的類,客戶端呼叫工廠類裡面的工廠方法,工廠類的工廠方法根據客戶端傳進去的引數new相應的類的物件返回給客戶端,客戶端得到返回的物件用該物件初始化該物件的成員變數最後呼叫該物件的方法執行計算...