php之原廠模式和抽象工廠

來源:互聯網
上載者:User
最近在看原廠模式和抽象原廠模式,把深入php那本書的這一塊看了兩遍,可還是迷迷糊糊的,於是去問了度娘,我覺得有篇博文裡這麼說的很有道理:

Factory 方法
Factory 方法是針對每一種產品提供一個工廠類。通過不同的工廠執行個體來建立不同的產品執行個體。
在同一等級結構中,支援增加任意產品。

抽象工廠
抽象工廠是應對產品族概念的。比如說,每個汽車公司可能要同時生產轎車,貨車,客車,那麼每一個工廠都要有建立轎車,貨車和客車的方法。
應對產品族概念而生,增加新的產品線很容易,但是無法增加新的產品。

具體見博文

簡而言之,Factory 方法是生產同一等級的不同產品,而抽象工廠是生產不同的產品族,而往往抽象工廠中會用到Factory 方法。

首先介紹一下Factory 方法吧。
假設我有一個人事管理項目,它需要管理Appointment(預約)對象,被要求用BloggsCal或者MegaCal的格式來和他們交流預約,當然隨著時間的發展,要求的格式肯定會變多。(在我看來這裡面的格式就相當於原廠模式中的產品啦)
在介面層級上我們可以定義出兩個類。其一是需要一個把Appointment對象轉化成一個專有格式,把它命名為AppEncoder類(產品product),另外一個需要管理員來獲得這個編碼器,我們把它命名為CommsManager類(建立者creator)。
接下來我們上代碼了:

abstractclassApptEncoder{abstractfunctionencode();}classBloggsApptEncoderextendsApptEncoder{functionencode(){return"Appointment data encode in BloggsCal format \n";    }}abstractclassCommsManager{abstractfunctiongetHeadText();abstractfunctiongetApptEncoder();abstractfunctiongetFooterText();}classBloggsCommsManagerextendsCommsManager{functiongetHeadText(){return"BloggsCal header\n";    }    functiongetApptEncoder(){returnnew BloggsApptEncoder();    }    functiongetFooterText(){return"BloggsCal footer \n";    }}

這裡面我唯寫了一個BloggsCal格式,相當於做了一種產品,如果再添加別的如MegaCal格式時只要繼承ApptEncoder類和CommsManager類就行了,這就是Factory 方法。
但是有沒有發現這種模式形成了一種特殊的代碼重複,而且可能會導致不必要的執行個體化,所以使用的時候要考慮清楚再使用原廠模式

下面介紹一下抽象工廠,
上面說過原廠模式是用來生產不同產品的而抽象工廠是用來產生不同產品族。那我們接著上個例子來看。
這時候項目不再滿足只有一個Appointment(預約)功能了,他需要增加Ttd(待辦事宜)和Contact(連絡人)的功能,這就是增加產品族了,我把類圖寫上來吧,省的寫代碼了,而且也更清楚一些。

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering.fadeIn(1700); }); });

    以上就介紹了php之原廠模式和抽象工廠,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.