栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

PHP设计模式之工厂方法*解读

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP设计模式之工厂方法*解读

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

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

工厂方法UML图:

简单工厂需要有4个角色

  • Product接口类:用于定义产品规范;

  • 具体的产品实现,例如ConcreateProductA、ConcreateProductB;

  • 抽象工厂类IFactory:用于规范工厂;

  • 具体产品创建的简单工厂,例如ConcreateFactoryA、ConcreateFactoryB。

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

namespace YjcSimpleFactory;

interface ICar
{
    public function driver();
}

具体产品实现:

namespace YjcSimpleFactory;

class Benz implements ICar
{
    public function driver()
    {
 echo 'benz driver.';
    }
}

class Bmw implements ICar
{
    public function driver()
    {
 echo 'bmw driver.';
    }
}

抽象工厂类IFactory:

namespace YjcFactory;

interface IFactory
{
    public static function makeCar();
}

具体工厂实现:

namespace YjcFactory;

class FactoryBenz implements IFactory
{
    public static function makeCar()
    {
 return new Benz();
    }
}

class FactoryBmw implements IFactory
{
    public static function makeCar()
    {
 return new Bmw();
    }
}

测试:

$car = FactoryFactoryBenz::makeCar();
$car->driver();

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

  • 优点:
  1. 工厂方法模式就很好的减轻了工厂类的负担,把某一类/某一种东西交由一个工厂生产;(对应简单工厂的缺点1)

  2. 同时增加某一类”东西“并不需要修改工厂类,只需要添加生产这类”东西“的工厂即可,使得工厂类符合开放-封闭原则。

  • 缺点:
  1. 相比简单工厂,实现略复杂。

  2. 对于某些可以形成产品族的情况处理比较复杂。

对于缺点2,我们可以借用[抽象工厂]来实现。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/226609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号