生成对象---工厂方法模式
Posted rcj_飞翔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成对象---工厂方法模式相关的知识,希望对你有一定的参考价值。
问题
当代码运行时我们才知道要生成的对象类型(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
结果
创建者类与产品的层次结构相似,导致特殊代码重复
导致不必要的子类化
以上是关于生成对象---工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章