工廠模式三部曲之二 工廠模式

2022-11-24 16:36:35 字數 2750 閱讀 2370

自《工廠模式三部曲之一_簡單工廠模式》之後,貌似已經很久沒有繼續這個三部曲了,所以抽點時間把後兩篇給補上吧。首先回顧下簡單工廠模式的主要內容:簡單工廠模式就是實質就是專門定義了一個工廠類,利用工廠類的靜態方法來根據使用者需求建立物件,優點是客戶端的壓力較小,客戶端不需要做建立例項的操作,只需要呼叫工廠類中的方法就可以獲得對應例項,而其缺點也非常明顯,其所有建立工作都在一個工廠類完成,耦合性較高,而且當系統需要增加或者修改產品時需要改動工廠類,既不符合單一職責的原則也不符合開放-關閉原則,所以就出現了工廠模式。

工廠模式

工廠模式是對簡單工廠模式的進一步抽象化,是簡答工廠模式的衍生,根據設計模式的基本原則也是設計模式的精髓“封裝變化點”,即**發生改變就把**封裝起來,所以工廠模式對簡單工廠中的工廠類做了一個封裝,使其滿足單一職責和開放-關閉原則。

【解決問題】:簡單工廠模式中違背了單一職責和開放-關閉原則。

【核心思想】:建立一個抽象工廠的基類,給每個產品建立一個工廠,該工廠繼承之抽象工廠,規定每個產品都有特定的工廠來建立。

【角色】

抽象工廠角色:這是工廠模式的核心,它與應用程式無關,是具體工廠必須繼承的父類或者必須實現的介面

具體工廠角色:包含邏輯業務的**,由應用程式呼叫以建立對應的具體產品物件

抽象產品角色:具體產品必須繼承的父類或者必須實現的介面

具體產品角色:所建立的物件就是此角色的例項

下面仍舊以簡單工廠中的例項來講解,對其進行改造

【角色分析】

抽象工廠:衣服製造廠 包含衣服的一些公共特性

具體工廠:**型別衣服製造廠 每個衣服製造廠只負責一件衣服(高內聚) ,當然也就是說當沒有客戶需要的衣服的時候需要建立一個對應的工廠及一件衣服 由該工廠負責提供這件衣服 但是對於以前的工廠和衣服都沒有影響(這是設計模式所期望的--單一職責原則)

抽象產品:衣服 包含衣服的一些公共特性

具體產品:**型別衣服 繼承抽象產品,當然可擴充套件自身特性

角色分析好了,就可以進行改造了,貼上改造完畢的各個部分**:

抽象工廠類:

抽象方法1//

抽象工廠:宣告工廠方法 返回一個產品

2public

abstract

class clothfactory

3     

該類中定義了一個抽象的createcloth()方法,用於建立衣服例項。

具體工廠類:

具體工廠1//

具體工廠1:商務裝工廠 只負責生產商務裝

2public

class businessfactory : clothfactory

3     

8     }910

//具體工廠2:運動裝工廠 只負責生產運動裝

11public

class sportfactory : clothfactory

12     

17     }

1819

//具體工廠3:校服工廠 只負責生產校服

20public

class lifefactory : clothfactory

21     

26     }

該類為核心,類中定義了businessfactory,sportfactory,

lifefactory三個工廠分別來建立商務裝,運動裝,校服,三個工廠都繼承之抽象工廠clothfactory,並都重寫了抽象工廠中的createcloth()方法,分別用來建立該工廠生產的衣服,利用里氏替換原則(子類代替父類)來實現,這是產品需要改變(新增,修改,刪除)時,如新增,只需要新增一個專門生產該產品的工廠和該產品就可以了,新增操作對之前所有的工廠和產品沒有直接的影響。修改同理,只需要修改建立該產品的工廠類就可以了,很好的遵循了開放-關閉原則,同時一個工廠類建立一個產品,遵循了單一職責的原則。

抽象產品類:

抽象產品1//

定義抽象產品:衣服

2public

abstract

class cloth

3     

該方法不需要作改變,仍舊定義了一個getcloth()方法,模擬使用產品。

具體產品類:

具體產品1//

定義具體產:1:商務裝

2class businesscloth : cloth

3     

8     }910

//定義具體產品2:運動裝

11class sportcloth : cloth

12     

17     }

1819

//定義具體產品3:休閒服

20class lifecloth : cloth

21     

26     }

該類也不需要作任何改變,根據**封裝改變**,工廠類的封裝和產品沒有直接的影響,仍舊定義了三種型別的衣服,並重寫抽象產品中的抽象方法,因為每種產品都有自身特性,有自身獨特的功能。

客戶端:

客戶端1

//客戶端

2class program

3     

16     }

執行效果:

優缺點總結:

優點:解決了簡單工廠中違背單一職責和開放-關閉原則問題,同時增加了程式的可擴充套件性,遮蔽了產品類。

缺點:1.邏輯判斷放在了客戶端進行

2.每新增一個產品都需要為它專門新增一個工廠用來生產,繁雜

3.每個工廠都只能生產一種產品,品種單一。

centos搭建SVN三部曲

搭建svn服務,有效的管理 以下三步可以快速搞定。1 安裝 yum install subversion 判斷是否安裝成功 subversion v svnserve,version 1.6.11 r934486 出現上面的提示,說明安裝成功。有了svn軟體後還需要建立svn庫 mkdir opt ...

求職面試三部曲

新進一家公司總有各種的不適應,或興奮,或緊張,或不安,或迷茫各種情緒兼而有之。曾經有個傢伙好不容易進了a公司,本來是要替代另一位即將離職的小夥伴的,結果,走得比那位兄弟還快,只堅持了幾天,這是何苦來著?之前我也講過,去一家公司應該是深思熟慮後的結果,否則就是浪費時間和精力 並且浪費的不光是你自己的時...

mysql定時器三部曲

1 檢視事件狀態 select event scheduler 或 show variables like sche 2.建立儲存過程 示例一批量新增 delimiter drop procedure if exists batch insert test proce create procedur...