PHP设计模式:工厂方法

发布时间:2017-7-1 11:38:29编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"PHP设计模式:工厂方法 ",主要涉及到PHP设计模式:工厂方法 方面的内容,对于PHP设计模式:工厂方法 感兴趣的同学可以参考一下。

示例代码详见https://github.com/52fhy/design_patterns

工厂方法

工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。

相比简单工厂,创建对象这件事不再交由一个类来创建:把简单工厂拆分,每个产品由专门的一个简单工厂来实现,每个简单工厂实现工厂接口类。这样实现在同一等级结构中,支持增加任意产品。

工厂方法UML图:

简单工厂需要有4个角色:

  • Product接口类:用于定义产品规范;
  • 具体的产品实现,例如ConcreateProductA、ConcreateProductB;
  • 抽象工厂类IFactory:用于规范工厂;
  • 具体产品创建的简单工厂,例如ConcreateFactoryA、ConcreateFactoryB。

代码:
ICar.php:定义产品规范:

namespace Yjc\SimpleFactory;interface ICar{    public function driver();}

具体产品实现:

namespace Yjc\SimpleFactory;class Benz implements ICar{    public function driver()    {        echo 'benz driver.';    }}class Bmw implements ICar{    public function driver()    {        echo 'bmw driver.';    }}

抽象工厂类IFactory:

namespace Yjc\Factory;interface IFactory{    public static function makeCar();}

具体工厂实现:

namespace Yjc\Factory;class FactoryBenz implements IFactory{    public static function makeCar()    {        return new Benz();    }}class FactoryBmw implements IFactory{    public static function makeCar()    {        return new Bmw();    }}

测试:

$car = Factory\FactoryBenz::makeCar();$car->driver();

思考:如果不使用工厂模式来实现我们的例子,也许代码会减少很多——只需要实现已有的车,不使用多态。但是在可维护性上,可扩展性上是非常差的(你可以想象一下添加一辆车后要牵动的类)。因此为了提高扩展性和维护性,多写些代码是值得的,尤其是复杂项目里。

参考:
1、设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 - superbeck的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/superbeck/article/details/4446177
2、简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别 - Danny Chen - 博客园
http://www.cnblogs.com/zhangchenliang/p/3700820.html


上一篇:vim 源码分析
下一篇:Windows10中的IIS10.0安装php manager和IIS URL 重写2.0组件的方法

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款