工廠模式三部曲之一 簡單工廠模式

2022-07-12 10:33:10 字數 1847 閱讀 8339

這段時間想要好好了解下工廠模式,從而在園中看了很多博友的關於工廠模式的部落格, 受益匪淺......同時也感謝各位博友對知識的無私的分享....知識在於積累,但個人覺得積累知識的最好方式是當自己學懂了某個知識點之後,進行一番總結,將學到的東西再慢慢的推理一遍,再細細的消化一遍,進而轉變為自己的東西.......

簡單工廠模式

簡單工廠模式又叫做靜態工廠模式,顧名思義,它就是用來例項化目標類的靜態類即客戶端不需要負責「建立」物件的職責,只要通過這個靜態類來建立出對應的類的例項返回給客戶端,客戶端只需要負責「消費」就可以了。。。

【解決問題】:如何去例項化乙個合適的物件

【核心思想】:有乙個專門的類類負責建立例項的過程 並返回給例項的物件

【角      色】

工廠類角色:擔任這個角色的簡單工廠模式的核心,工廠類在客戶端的直接呼叫下 建立產品物件並返回該物件。

抽象產品角色:擔任這個角色的類是工廠類所建立的物件的父類,或者他們有共同的介面。 

具體產品角色:工廠類所建立的任何物件都是這個角色的例項 

下面介紹乙個例子來進行講解

首先了解下現實場景:乙個人總有很多件不同型別的衣服來適應不同的場合,怎麼樣用程式來實現呢??

對該場景進行分析:

工廠類:根據場合,獲得相應衣服---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關鍵字來建立,但這樣耦合度太高,如果建立此物件時,需要一些其他的操作,這些 建立物件和一些其他的操作 如果沒有封裝起來給客戶端使用,客戶端大量使用這些 一旦這些重複的操作需要更改,那麼帶來的工作量將是巨大的,也不利於擴充套件。所以我們建立...