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

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

工厂方法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)

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

缺点:

相比简单工厂,实现略复杂。

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

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

php factory interface,PHP设计模式之工厂方法*解读相关推荐

  1. 【设计模式】工厂方法模式 Factory Method Pattern

    在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...

  2. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

  3. Java设计模式之工厂方法模式与抽象工厂模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...

  4. 二、java设计模式之工厂方法+抽象工厂模式(创建型设计模式)

    创建型设计模式-工厂模式和应用 工厂模式介绍: 它提供了一种创建对象的最佳方式,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 例子: 需要购买一辆车,不用管 ...

  5. 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例

    文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...

  6. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  7. 设计模式之工厂方法模式(创建型)

    一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...

  8. 设计模式之工厂方法模式应用例题

    设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...

  9. 设计模式复习-工厂方法模式

     设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...

最新文章

  1. P3807-[模板]卢卡斯定理
  2. html页面内分栏显示不全,怎么消除Word文档分栏后栏间不平衡现象
  3. http状态 404 - 未找到_404终结者来了!
  4. 初学JAVA随记——构造方法
  5. DBGrid 应用全书
  6. Android 获取cpu序列号
  7. 最近面试 Java 后端开发的感受!现在的环境太。。。
  8. 7.业务架构·应用架构·数据架构实战 --- 业务架构书
  9. Linux系统中用源代码编译安装软件和查看进程
  10. 【手游逆向】初探Unity3d+il2cpp.so网游修改新手教程篇[内附所有相关工具下载地址和说明介绍】
  11. 饼状图显示以及出现问题处理
  12. ddr3ip核心_XILINX DDR3 IP核使用教程
  13. 计算机网络实验:无线组网
  14. EMV规范(一)——背景介绍
  15. PHICH介绍(1)
  16. Flash鼠绘入门第八课:绘制脱俗荷花-Flash鼠绘脱俗荷花教程(6)
  17. 【步兵 c++】教科书般的A*寻路算法
  18. Openstack 03 - Nova Compute
  19. 矩阵和矩阵转置求导公式
  20. mybatis mysql查询树形结构_mybatis树结构查询的方法

热门文章

  1. 我与ARM的那些事儿2JINLK烧录nor flash
  2. 年龄大了学Java是爱好还是转型?
  3. 【水】uva10037 过桥
  4. Leetcode--136. 只出现一次的数字
  5. oracle clob截取_Oracle数据库设计规范建议
  6. oracle 从pflie启动,oracle初始化参数文件管理
  7. ubuntu安装完mysql无法登录_Ubuntu安装mysql8后无法登陆怎么解决
  8. Elsevier LaTeX时间-年份(author-year)两种引用格式
  9. LATEX调整公式、图片与正文间距离,文字间距离,调整空白大小
  10. Python下载中国数据库大会(DTCC2020)PPT全集