初探設計模式 工廠模式

2021-10-03 03:47:31 字數 1466 閱讀 8313

pizza是超型別,cheesepizza、clampizza是其子類。
public

abstract

class

pizza

void

box(

)}

得到乙個具體物件:

pizza cheesepizza=

newcheesepizza()

;

得到多個具體物件:

pizza pizza;if(

"cheese"

) pizza=

newcheesepizza()

;elseif(

"clam"

) pizza=

newclampizza()

;elseif(

)...

如果要對pizza類進行擴充套件就要在客戶類中修改這段**,違反了對修改封閉的原則

應用封裝變化的原則,把這段具體例項化的過程抽離到乙個類中,我們把這個類就叫工廠,用來處理建立物件的細節。

建立乙個簡單工廠,封裝建立物件的**,返回值為工廠產品

public

class

******factory

elseif(

)return pizza;

}}

這個工廠可以有很多客戶,寫乙個pizzastore客戶不通過具體例項化來獲得工廠產品

public

class

pizzastore

public pizza orderpizza

(string type)

}

這樣通過pizzastore就可以獲得pizza物件,如果想要得到不同特色種的pizza只要多寫幾個簡單工廠就行了

現在把pizzastory作為超類,create方法變成抽象方法

這樣通過繼承這個超類,不同子類分別實現create方法也可以得到不同風味的pizza

把 orderpizza宣告成final,prepare box等方法就被保證不被修改

public

abstract

class

pizzastore

abstract pizza createpizza

(string type)

;}

orderpizza實現了解耦,對修改封閉,對擴充套件開放。

工廠方法模式:定義乙個建立物件的介面,但由繼承來的子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。

定義乙個介面,子類實現pizza原料的方法,將子類例項化後組合到抽象類pizza和pizzastory的子類中。

。。。。菜啊

初探設計模式 抽象工廠模式

在簡單工廠模式的基礎上,做深層思考 乙個介面,根據不同業務編碼,我們建了乙個工廠類來處理 如果有多個介面都是類似情況呢?有沒有辦法合併一下?這個時候就要用到抽象工廠模式了 一 建立另乙個業務介面,並定義乙個業務實現方法public inte ce otherservice二 建立實現該介面的各個實現...

設計模式初探

花了大概11個番茄,把 大話設計模式 這本書從頭到尾翻了一遍。畫了一張導圖。整本書介紹了物件導向和設計 模式,但顯然這兩部分是不可分割的。每個設計模式都是物件導向思想的靈活運用,無不體現著封裝,繼承,多型,最 終歸結為抽象二字。正如 精彩的 是如何想出來的,要比看到精彩的 更加令人期待 每個設計模式...

設計模式 初探

一 是什麼 模式是解決一類問題的方法。設計模式本身是不存在的,是一種隱性知識,它是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。二 為什麼要學 設計模式是為了解決問題而發明的有效的方法,23種模式都是前輩們經過多年的摸索總結出來的,其有效性不容置疑。每乙個設計模式都是針對乙個或者一類...