摘要:所以,也要慎用當(dāng)你的項目中,產(chǎn)品越來越多,創(chuàng)建者的數(shù)量也隨之臃腫,下一篇將介紹抽象工廠方法的變體原型模式,這種模式可以減少必須創(chuàng)建的類。
抽象工廠方法模式
在工廠方法模式中,我們通過中間件的方式,形成了以下格式的分離:
使用者
↓
創(chuàng)建者
↓
具體產(chǎn)品
這樣,我們無論怎樣修正具體產(chǎn)品,都不會影響使用者。現(xiàn)在,我們可以做出來一群小工廠,他們有各自的產(chǎn)品,但形成了模式層面的重復(fù),那么我們?nèi)绾位膺@種重復(fù)呢?
在本篇,將通過抽象工廠方法模式——抽象 - 工廠方法 - 模式,來完成對小公司的整合,最初設(shè)計(母公司 - 子公司):
接下來,我們要通過抽象類解決多個業(yè)務(wù)并行的問題。
現(xiàn)在,我們要寫一個PIM的數(shù)據(jù)格式解碼器 - Personal Information Manage,會產(chǎn)生預(yù)約(Appt)、待辦事宜(Ttd)、聯(lián)系人(Contact)三種數(shù)據(jù)格式。
我們就可以設(shè)計出下列UML:
通過CommsManager抽象類,我們可以生成具體的所有子公司(子類)。
但事實(shí)上,這也一定程度的顯示了為什么有些公司做不好某些行業(yè),一旦他哪怕是間接介入子公司,也會影響子公司的血統(tǒng)(這個想法我最早接觸于吳軍先生的《浪潮之巔》)。
實(shí)現(xiàn)abstract class CommsManager { abstract function getHeaderText(); abstract function getApptEncoder(); abstract function getTtdEncoder(); abstract function getConteactEncoder(); abstract function getFootText(); } class BloggsCommsManager extends CommsManager { function getHeaderText() { return "BloggsCal header "; } function getApptEncoder() { return new BloggsApptEncoder(); } function getTtdEncoder() { return new BloggsTtdEncoder(); } function getConteactEncoder() { return new BloggsConteactEncoder(); } function getFootText() { return "BloggsCal footer "; } }
在這里,我們用了工廠模式(目錄在最后)。設(shè)計模式之間經(jīng)常這樣協(xié)作,一個模式的創(chuàng)建,可以成為另一個模式的一部分。
這方面的想法就是源于模式本身:他是經(jīng)過無數(shù)次同條件下,實(shí)踐得出的最優(yōu)解——未來如果有更好的條件,這個最優(yōu)解就仍然有優(yōu)化的空間 / 或者沒有存在的。
結(jié)果模式的意義:
徹底的將 業(yè)務(wù)需求 與 實(shí)現(xiàn)細(xì)節(jié) 分割,現(xiàn)在,我們可以隨意的改動編碼格式,而不用擔(dān)心業(yè)務(wù)層產(chǎn)生BUG;
通過強(qiáng)制整合,所有Blogger格式的內(nèi)容,都通過Blogger創(chuàng)建者類來實(shí)現(xiàn),不會出錯;
當(dāng)然,添加新產(chǎn)品則是令人苦惱的,為了創(chuàng)建新產(chǎn)品的具體實(shí)現(xiàn),我們必須修改抽象創(chuàng)建者、和他的每一個具體實(shí)現(xiàn)。
PHP目前還沒有強(qiáng)制規(guī)定 方法的返回類型,這產(chǎn)生了一些額外的靈活性。(強(qiáng)制規(guī)定返回類型,一般為JAVA之類的 強(qiáng)類型-面向?qū)ο?語言)
abstract class CommsManager { const APPT = 1; const TTD = 2; const CONTACT = 3; abstract function getHeaderText(); abstract function mark( $flag_int ); abstract function getFootText(); } class BloggsCommsManager extends CommsManager { function getHeaderText() { return "BloggsCal header "; } function mark( $flag_int ) { switch ($flag_int) { case self::APPT: return new BloggsApptEncoder(); case self::TTD: return new BloggsTtdEncoder(); case self::CONTACT: return new BloggsConteactEncoder(); } } function getFootText() { return "BloggsCal footer "; } }
類的接口變得更加緊湊,但也有一定的代價,我們放棄了詳細(xì)的數(shù)據(jù)格式方法,而是將其中心化了,客戶無法確認(rèn)是否實(shí)現(xiàn)了需要的具體產(chǎn)品。
所以,也要慎用~
當(dāng)你的項目中,產(chǎn)品越來越多,創(chuàng)建者的數(shù)量也隨之臃腫,下一篇將介紹抽象工廠方法的變體:原型模式,這種模式可以減少必須創(chuàng)建的類。
面向?qū)ο笤O(shè)計模式 - 目錄
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22580.html
摘要:工廠方法模式面向?qū)ο蟮脑O(shè)計強(qiáng)調(diào)抽象類高于實(shí)踐,盡可能的將代碼設(shè)計的一般化,而非特殊化也就是降低耦合,提升標(biāo)準(zhǔn)性。于是,前輩們便設(shè)計了特定類處理實(shí)例化的工廠方法。實(shí)現(xiàn)這個時候我們引入工廠方法模式,設(shè)置類創(chuàng)造者,類產(chǎn)品,。面向?qū)ο笤O(shè)計模式目錄 工廠方法模式 面向?qū)ο蟮脑O(shè)計強(qiáng)調(diào)抽象類高于實(shí)踐,盡可能的將代碼設(shè)計的一般化,而非特殊化——也就是降低耦合,提升標(biāo)準(zhǔn)性。于是,前輩們便設(shè)計了特定類處理...
摘要:原型模式平行的繼承層次使用工廠模式在大型設(shè)計中,必須去維護(hù)大量的產(chǎn)品類。上文中,稱之為特殊的耦合在這里我們介紹一種其抽象工廠模式的變體原型模式。面向?qū)ο笤O(shè)計模式目錄 原型模式 平行的繼承層次使用工廠模式在:大型設(shè)計中,必須去維護(hù)大量的產(chǎn)品類。(上文中,稱之為特殊的耦合) 在這里我們介紹一種其抽象工廠模式的變體:原型模式。它使用clone關(guān)鍵詞,來復(fù)制具體產(chǎn)品類,使得具體產(chǎn)品類能完成自我...
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進(jìn)行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進(jìn)行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:面向?qū)ο笤O(shè)計的五大原則單一職責(zé)原則接口隔離原則開放封閉原則替換原則依賴倒置原則。主要是針對繼承的設(shè)計原則,繼承與派生多態(tài)是的主要特性。 面向?qū)ο笤O(shè)計的五大原則:單一職責(zé)原則、接口隔離原則、開放-封閉原則、替換原則、依賴倒置原則。這些原則主要是由Robert C.Martin在《敏捷軟件開發(fā)——原則、方法、與實(shí)踐》一書中總結(jié)出來,這五大原則也是23種設(shè)計模式的基礎(chǔ)。 單一職責(zé)原則 Sin...
閱讀 1216·2019-08-30 15:55
閱讀 964·2019-08-30 15:55
閱讀 2161·2019-08-30 15:44
閱讀 2895·2019-08-29 14:17
閱讀 1140·2019-08-29 12:45
閱讀 3316·2019-08-26 10:48
閱讀 3142·2019-08-23 18:18
閱讀 2613·2019-08-23 16:47