生成对象---工厂方法模式
生活随笔
收集整理的這篇文章主要介紹了
生成对象---工厂方法模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題
當代碼運行時我們才知道要生成的對象類型(BlogApptEncoder或者MegaBlogApptEncoder)
我們需要能夠相對輕松的加入一些新的產品類型(如一種新業務處理方式SyncMl)
每一個產品類型都可定制特定的功能(getHeaderText()和getFooterText())
實現
<?php /*factory_method.php 工廠方法模式把創建者與要生產的產品類分離開, 創建者是一個工廠類,定義了用于生成產品對象的類方法, 如果沒有提供默認實現,那就有創建者的子類來執行實例化 一般情況下創建者的每個子類實例化一個相應的產品子類 *///產品類 abstract class AppenCoder{abstract function encode(); }class BlogsAppEncoder extends AppenCoder{function encode(){return "Appointment data encode in Blogs";} }//創建者,工廠類(用于生成對象的類) abstract class CommonManager{abstract public function getHearText();//生成產品對象的類方法abstract public function getAppEncoder();abstract public function getFooterText(); }class BlogsManager extends CommonManager{public function getHearText(){return "BlogsCal header";}/*子類實例化一個產品子類*/public function getAppEncoder(){return new BlogsAppEncoder();}public function getFooterText(){return "BlogsCal Footer";} } $create = new BlogsManager(); $obj = $create->getAppEncoder();//得到一個生成的產品對象 echo $obj ->encode(); ?>?
uml
結果
創建者類與產品的層次結構相似,導致特殊代碼重復
導致不必要的子類化
?
轉載于:https://www.cnblogs.com/rcjtom/p/6055066.html
總結
以上是生活随笔為你收集整理的生成对象---工厂方法模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rnotebook中用python画图
- 下一篇: 字符串数组