码迷,mamicode.com
首页 > 其他好文 > 详细

生成对象---工厂方法模式

时间:2016-11-11 19:31:12      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:text   header   处理   代码   mon   int   类方法   定义   产品   

问题

当代码运行时我们才知道要生成的对象类型(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

技术分享

结果

创建者类与产品的层次结构相似,导致特殊代码重复

导致不必要的子类化

 

生成对象---工厂方法模式

标签:text   header   处理   代码   mon   int   类方法   定义   产品   

原文地址:http://www.cnblogs.com/rcjtom/p/6055066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!