首页 > 代码库 > 生成对象---工厂方法模式
生成对象---工厂方法模式
问题
当代码运行时我们才知道要生成的对象类型(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
结果
创建者类与产品的层次结构相似,导致特殊代码重复
导致不必要的子类化
生成对象---工厂方法模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。