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

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

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

工厂方法UML图:

AAffA0nNPuCLAAAAAElFTkSuQmCC

简单工厂需要有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,我们可以借用[抽象工厂]来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宽量程电压电流 stm32_电压、电阻知识点汇总

电压(一)电压的作用1.电压是形成电流的原因:电压使电路中的自由电荷定向移动形成了电流。电源是提供电压的装置。2.电路中获得持续电流的条件:①电路中有电源(或电路两端有电压);②电路是连通的。 3.在理解电流、电压的概念时,通过…

JAVA入门级教学之(对象和引用)

对象和引用: 对象:目前在使用new运算符在堆内存中开辟的内存空间称为对象 引用:是一个变量,不一定是局部变量,还可能是成员变量。引用保存了内存地址,指向了堆内存中的对象 所有访问实例相关的数据&#…

matlab多变量频域设计工具箱,10.4.3用MATLAB实现连续系统的频域分析.ppt

10.4.3用MATLAB实现连续系统的频域分析.ppt第10章 MATLAB在信号与系统分析中的应用 10.0 引  言    一般来说,MATLAB系统包括下面五个主要部分。  (1)编程语言:是一种以矩阵和数组为基本单位的编程语言;  (2)工作环境:包括了一系列应用工具,提供编程和调试程序的环境…

group by 去重_【小学英语口语】07I have to pee. 我要去尿尿

内容请看 ◆◆ ◆ 点下方录音跟读I have to pee.我要去尿尿。I have to poop.我要去便便。I m about to poop.我快要拉出来了。Take off your pants first.先把你的裤子脱下来。Don t forget to flush.别忘了冲水。Don t use too much toilet paper. 不要用太多的厕纸。Phew! I…

JAVA入门级教学之(参数传递)

JAVA入门级教学之(参数传递) 问题引入: 参数分为形式参数还有实际参数,我们传入是的数据到底是什么呢? 方法调用的时候,涉及参数传递的问题, 传递的时候,java只遵循一种语法机制 就…

java过滤器的优点好处,Servlet过滤器概念特点等详谈

Servlet过滤器概念特点等详谈一、Servlet过滤器的概念:◆Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改。◆Servlet过滤器本身并不产生请求和响应对象,它只能提供过滤作用。Servlet过期能…

ionic 支持float吗_机器人协会 | 一起拼机器人吗?

数字生活改变世界科技创新引领未来机器人协会开始招新啦~~东莞职业技术学院机器人协会成立于2016年,由东莞职业技术学院电子与电气工程学院支持,由工业机器人技术专业的学生成立。协会位于东莞市东莞职业技术学院实训楼6C4-203。协会成员于2018年获得世界…

JAVA入门级教学之(this关键字)

this关键字 关于java语言中的this关键字 1.this是一个关键字,翻译为:这个 2.this是一个引用,this是一个变量,this变量中保存了内存地址指向了自身,this存储在JVM堆内存java对象内部 3.创建100个java对象&#xf…

qsplitter 折叠_河南断桥折叠门效果

断桥折叠门效果。天津庭窗之星建材优秀的表面处理型材工艺,人性化的设计理念,精湛的制造工艺。产品具有环保,耐用,耐腐蚀不褪色,安全、保温、隔音等特性。阳光房框架结构不坚固 阳光房框架结构不坚固,是导致…

php 计划任务管理,使用php管理crontab计划任务

1.使用php-crontab-manager管理计划任务要求 PHP>5.3使用方法举例use php\manager\crontab\CrontabManager;$crontab new CrontabManager();$crontab->enableOrUpdate(/tmp/my/crontab.txt);$crontab->save();添加一个简单的计划任务:use php\manager\crontab\Cronta…

串行口方式二 波特率_一文就能看懂“串口通讯”的概念、3个通讯方式、9大注意事项...

串行通信是数据处理设备和外围设备之间最广泛使用的信息传输方法。每个设备可能是您的个人电脑或移动设备在运行串行协议。该协议是一种安全可靠的通信形式,由源主机(发送方)和目的主机(接收方)制定一套规则。为了获得更好的洞察力,我已经解释了串行通信…

冯提莫在B站的受欢迎度

本来以为冯提莫在离开斗鱼之后,离开了那些喜欢她的粉丝之后!很难发展起来,但谁能想到冯提莫在离开斗鱼之后,加入了B站,之前的老粉丝们也一下子涌入了B站,为B站带来了很多的流量!同样冯提莫也收获…

php中如何将验证码放入页面,如何在php中生成验证码图片

1.获取生成验证码字体:在php文件路径新建一个fonts文件夹,里面有字体文件。//判定字体资源if(empty($fonts))$fonts"arial.ttf";//确认字体路径$fonts__DIR__."/fonts/".$fonts;$fontsstr_replace("/","\\",$fo…

无法确定域的标识_标识标牌设计的基本要求:虽然是基本要求,你未必也都知道哦...

标识设计不仅是实用物的设计,也是一种图形艺术的设计。标识圈认为标识标牌设计须充分考虑其实现的可行性,标识设计不是要与众不同,而是要善与人同,能被受众迅速归类。当我们在大街上看到一个路标,一个招牌,它给到我的只有一个信息…

JAVA入门级教学之(static关键字)

static关键字: package com.lbj.javase07; /*** "中国人"类* * 什么时候成员变量声明为实例变量呢?* -所有对象都有这个属性,但是这个属性的值会随着对象的变化而变化【不同对象的这个属性具体的值不同】* * 什么时候成员变量声…

怎样配oracle环境,oracle配置会话环境(set命令)

一般在SQL>下进行SQLPLUS操作,都需要进行必要的环境设置才能完成我们所需要的输出。所有环境的设置由SET命令加相应的环境变量来完成。下面是常用的环境设置:2.5.1ARRAYSIZE(取回的行数)SET ARRAY[SIZE]{integer}一次可以提取(Fetch)的行的数目&#…

rpgmvp图片怎么看_拼多多商城图片和视频下载不了怎么办,看这里。。。。

最近拼多多商城规则变动,很多软件都不能下载拼多多商城图片和视频。小编今天试了一种新的方法可以同时下载商城里的图片和视频。现在一起来看看是如何操作的吧。准备软件:下图高手高级版软件实例操作步骤1、打开拼多多商城,按F12进入开发者工…

JAVA入门级教学之(static静态代码块)

定义一个测试类测试static静态代码块: package com.lbj.javase08; /*** 可以使用static关键字来定义"静态代码块"* * 1.语法格式:* static{* java语句;* }* * 2.静态代码块在类加载的时候执行,并且只执行一次* * 3.静态…

oracle关闭rs,Oracle 关闭(shutdown immediate)时hang住

昨天晚上生产的两套10.2.0.4的数据库修改了参数,需要重启。在发出shutdown immediate命令后等了大概10分钟的时间,数据库还没有down下来。检查后台alert日志,发现从开始shutdown到最后只输出几条日志,其中最后一条日志是&#xff…

web大作业介绍自己的家乡_襄阳市恒大名都小学2018—2019年度寒假实践作业

亲爱的同学们: 经过一个学期的成长,我们带着满满的收获开启了期盼已久的寒假生活。那么如何让这个寒假生活变得多姿多彩,充满意义呢?为了让我们度过一个健康、愉快、长知识、增才干,获得幸福感的寒假,…