簡單工廠
簡單工廠其實不是一個設計模式云头,反而比較像一種編程習慣泡嘴。簡單工廠作為唯一的入口來負責具體對象的創(chuàng)建霎肯,將創(chuàng)建過程封裝起來怔接。
簡單工廠不具備工廠方法的彈性搪泳,因為簡單工廠不能變更正在創(chuàng)建的產(chǎn)品。
工廠方法
定義一個創(chuàng)建對象的接口扼脐,但由子類決定要實例化的類是哪個岸军。工廠方法讓類把實例化推遲到子類。
Factory Method Pattern通過讓子類決定該創(chuàng)建的對象瓦侮,來達到封裝對象創(chuàng)建過程的目的艰赞。
具體類繼承自同一個抽象父類。父類中定義一個抽象的工廠方法肚吏,持有抽象產(chǎn)品方妖,委托給由子類負責具體創(chuàng)建具體產(chǎn)品。具體產(chǎn)品繼承與同一抽象產(chǎn)品罚攀。
簡單工廠與工廠方法的差異在于:
簡單工廠在一個地方完成了所有產(chǎn)品的創(chuàng)建党觅,然而工廠方法確是創(chuàng)建一個框架,讓子類決定具體實現(xiàn)斋泄。
對于簡單工廠杯瞻,如果要增加一種產(chǎn)品,勢必需要修改原先代碼炫掐;對于工廠方法魁莉,如果要增加一種產(chǎn)品,則新增一個子類的實現(xiàn)即可,不需要修改原先代碼旗唁。這正是遵循了設計原則中的對擴展開放畦浓,對修改關閉
。
抽象工廠模式
提供一個接口检疫,用于創(chuàng)建相關或依賴對象的家族讶请,而不需要明確指定具體類。
抽象工廠使用對象組合:對象的創(chuàng)建被實現(xiàn)在工廠接口所暴露出來的方法中屎媳。
圖應該很容易看懂了秽梅,北京餐廳生產(chǎn)北京特色的雞肉、鴨肉剿牺、牛肉企垦,上海餐廳呢,自然是生產(chǎn)上海特色的雞肉晒来、鴨肉钞诡、牛肉。作為抽象工廠AbstractRestaurant湃崩,只負責聲明餐廳要提供雞肉荧降、鴨肉、牛肉攒读,至于各個地方如何具體生產(chǎn)朵诫,就由各個地方的餐廳自己負責了。