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種模式都是前輩們經過多年的摸索總結出來的,其有效性不容置疑。每乙個設計模式都是針對乙個或者一類...