這段時間想要好好了解下工廠模式,從而在園中看了很多博友的關於工廠模式的部落格, 受益匪淺......同時也感謝各位博友對知識的無私的分享....知識在於積累,但個人覺得積累知識的最好方式是當自己學懂了某個知識點之後,進行一番總結,將學到的東西再慢慢的推理一遍,再細細的消化一遍,進而轉變為自己的東西.......
簡單工廠模式
簡單工廠模式又叫做靜態工廠模式,顧名思義,它就是用來例項化目標類的靜態類即客戶端不需要負責「建立」物件的職責,只要通過這個靜態類來建立出對應的類的例項返回給客戶端,客戶端只需要負責「消費」就可以了。。。
【解決問題】:如何去例項化乙個合適的物件
【核心思想】:有乙個專門的類類負責建立例項的過程 並返回給例項的物件
【角 色】
工廠類角色:擔任這個角色的簡單工廠模式的核心,工廠類在客戶端的直接呼叫下 建立產品物件並返回該物件。
抽象產品角色:擔任這個角色的類是工廠類所建立的物件的父類,或者他們有共同的介面。
具體產品角色:工廠類所建立的任何物件都是這個角色的例項
下面介紹乙個例子來進行講解
首先了解下現實場景:乙個人總有很多件不同型別的衣服來適應不同的場合,怎麼樣用程式來實現呢??
對該場景進行分析:
工廠類:根據場合,獲得相應衣服---createcloth()方法
抽象產品:衣服具有一些共同的特徵,或者定義公共方法或者屬性,放在此類中-----abstract:getcloth()抽象方法
具體產品:衣服 繼承與介面或者抽象 同時具有自身的特點
接下來貼上**:
抽象產品類:定義了乙個公共的方法getcloth(),用來獲取對應的衣服 1//
抽象產品:獲取衣服
2public
abstract
class cloth
3
具體產品類:定義了三種具體的產品:商務裝、休閒裝、運動裝,都繼承於抽象產品類,重寫了抽象產品類中的抽象方法1//
具體產品1:商務裝
2class 商務裝 : cloth
3
8 }910
//具體產品2:運動裝
11class 運動裝 : cloth
12
17 }
1819
//具體產品3:休閒裝
20class 休閒裝 : cloth
21
26 }
工廠類(核心
):根據客戶端傳入的引數來例項化對應類的物件 並返回該物件給客戶端(這裡的引數為服裝型別拼音的小寫首字母),定義了乙個createcloth()
方法----當然,這裡的型別必須是已知的,也可以將型別放置於配置檔案中來進行擴充套件,,便於型別的新增和修改........1//
工廠類:根據客戶端條件 建立並返回物件
2public
class clothfactory
3
23return cloth;
24 }
客戶端:呼叫工廠類的靜態方法,傳入合適的引數獲取對應物件1//
客戶端2
static
void main(string args)
3
總結優缺點:
優點:使用者在使用時是根據工廠類去建立所需的物件例項,而無需了解是如何建立和組織這種細節問題,有利於軟體體系結構的優化
缺點:1.建立和不同例項物件的操作都在乙個類中完成,即不符合單一職責的原則
2.當需要新增或者刪除某個功能是會比較麻煩,需要修改工廠類,違背了開放-封閉的原則(對修改封閉,對擴充套件開放)
3.工廠類中的方法為static靜態方法(靜態工廠方法),不能通過繼承來改變建立行為
工廠模式三部曲之抽象工廠模式
工廠方法模式有乙個問題就是,類的建立依賴工廠類,也就是說,如果想要拓展程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決?就用到抽象工廠模式,建立多個工廠類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的 因為抽象工廠不太好理解,我們先...
單例模式三部曲
class single 構造私有類函式 private static single s new single 把類定義為靜態的 public static single getsingle 例如 class student public void setid int id public strin...
工廠模式之一 簡單工廠模式
在物件導向程式設計中,產生乙個物件例項最常用的方法是使用new關鍵字來建立,但這樣耦合度太高,如果建立此物件時,需要一些其他的操作,這些 建立物件和一些其他的操作 如果沒有封裝起來給客戶端使用,客戶端大量使用這些 一旦這些重複的操作需要更改,那麼帶來的工作量將是巨大的,也不利於擴充套件。所以我們建立...