PHP设计模式——工厂方法
声明:本系列博客参考资料《大话设计模式》,作者程杰。
前面我们介绍了简单工厂,今天我们继续学习另外一个工厂——工厂方法。
工厂方式模式主要由以下几种角色组成:
抽象工厂角色(IServerFactory):是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂角色(ChickenLegBaoFactory):这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。
抽象产品角色(IHanbao):工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品角色(ChickenLegBao):这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
根据以上UML类图和角色编写以下PHP代码:
<?php
/*** Created by PhpStorm.* User: Jiang* Date: 2015/4/16* Time: 22:12*//**抽象产品角色 汉堡* Interface IHanbao*/
interface IHanbao
{function Allay();
}/**具体产品角色 肉松汉堡* Class RouSongBao*/
class RouSongBao implements IHanbao
{function Allay(){echo "I am 肉松汉堡,小的给主人解饿了!<br/>";}}/**鸡肉汉堡* Class ChickenBao*/
class ChickenBao implements IHanbao
{function Allay(){echo "I am 鸡肉汉堡,小的给主人解饿了!<br/>";}}/**抽象工厂角色* Interface IServerFactory*/
interface IServerFactory
{function MakeHanbao();
}/**具体工厂角色 肉松汉堡工厂* Class RouSongFactory*/
class RouSongFactory implements IServerFactory
{function MakeHanbao(){return new RouSongBao();}
}class ChickenFactory implements IServerFactory
{function MakeHanbao(){return new ChickenBao();}
}
测试代码:
header("Content-Type:text/html;charset=utf-8");
//------------------------工厂方式测试代码------------------
require_once "./FactoryMethod/FactoryMethod.php";//-----------------餐厅厨师-----------
$chickenFactory=new ChickenFactory();
$rouSongFactory=new RouSongFactory();//-----------点餐------------
$chicken1=$chickenFactory->MakeHanbao();
$chicken2=$chickenFactory->MakeHanbao();
$rouSong1=$rouSongFactory->MakeHanbao();
$rouSong2=$rouSongFactory->MakeHanbao();//------------------顾客吃饭---------
$chicken1->Allay();
$chicken2->Allay();
$rouSong1->Allay();
$rouSong2->Allay();
用浏览器运行测试代码我们可以发现,顾客都享用了自己的食物。
工厂方法模式优缺点:
优势:克服了简单工厂模式违背开放-封闭的原则,保持了封装对象创建过程的优点。
简单工厂模式与工厂方法模式的比较:
1. 结构复杂度
2.代码复杂度
3.管理上的难度
假如某个具体产品类需要进行一定的修改,很可能需要修改对应的工厂类。当同时需要修改多个产品类的时候,对工厂类的修改会变得相当麻烦。反而简单工厂没有这些麻烦,当多个产品类需要修改是,简单工厂模式仍然仅仅需要修改唯一的工厂类。
欢迎关注我的视频课程,地址如下,谢谢。
PHP面向对象设计模式
PHP设计模式——工厂方法相关推荐
- 设计模式 工厂方法_工厂方法设计模式
设计模式 工厂方法 工厂方法模式是流行的创作设计模式之一. 它并不特别依赖于工厂对象来创建对象. 而是要在同一类中使用单独的方法来创建对象. Factory Method模式定义了一个用于创建对象的接 ...
- 设计模式 工厂方法_工厂设计模式–一种有效的方法
设计模式 工厂方法 如您所知,"工厂方法模式"或俗称"工厂设计模式"是"创意设计模式"类别下的一种设计模式. 模式背后的基本原理是,在运行时 ...
- 设计模式 工厂方法_使用工厂方法模式设计最佳实践
设计模式 工厂方法 在前面的"设计模式"示例中,我们解释了当今常用的"工厂"模式. 在本节中,我们将了解具有更多抽象的更高级的解决方案. 该模式称为工厂方法设计 ...
- 4. 星际争霸之php设计模式--工厂方法模式
题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...
- java 工厂方法_java设计模式-工厂方法模式
1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的"创建与使用相分离" ...
- 设计模式 | 工厂方法模式及典型应用
工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化.工厂方法模式让一个类的实例化延迟到其子类. 工厂方法模式又简称为工厂 ...
- python工厂模式 django_python设计模式-工厂方法模式
题目:假设你有一个 pizza 店,功能包括下订单.做 pizza,你的代码会如何写呢? def order_pizza(): pizza = Pizza() pizza.prepare() pizz ...
- 工厂方法模式_1天1个设计模式——工厂方法模式
意图 工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型. 问题 假设你正在开发一款物流管理应用.1.0版本只能支持处理卡车运输,因此大部分的代码都位 ...
- [设计模式] ------ 工厂方法模式
工厂方法模式 手机厂造手机,肥皂厂造肥皂,药品厂造药品. 假设有一大类对象A1,A2,A3,A4-他们都有一个共同的父类A A1可以想成是手机,A2可以想成肥皂- (下面例子的A1Factory就是手 ...
- JAVA设计模式 - 工厂方法模式
工厂方法模式(Factory Pattern) 是一种创建型设计模式 , 它是Java中最常用的设计模式之一 . 1 . 工厂方法模式的定义 定义一个创建对象的接口 , 让子类决定实例化哪一个类 . ...
最新文章
- TiDB 源码阅读系列文章(十八)tikv-client(上)
- SpringBoot使用教程【1】Restful API设计 返回json,xml格式...
- ADO.net数据访问
- JavaScript解决命名冲突的一种方法
- 【idea】idea如何配置JDK(转)
- mfc 中获得本身程序句柄的代码
- JAVA中的适配器应用_Java适配器模式应用之电源适配器功能详解
- ln创建、删除软/硬链接
- POJ2155 Matrix二维线段树经典题
- Java Error(四)
- php装箱,PHP实现的装箱算法示例
- 无法加载 Chrome PDF Viewer
- H264编码器性能测试
- 调通sina33下的AP6212A0版本的BT(V1.0)
- 忘记了Excel工作表保护密码的解决办法
- 情景式领导力学习(1) - 介绍
- PCL读取带rgb信息的asc文件C++
- 用html中表单标签实现QQ登录注册静态页面
- ZZULIOJ1194: 总成绩排序(结构体专题)
- IOS版aplayer使用教程_Y Y的使用教程视频版/图片版(手机版。电脑版。楚恒上课必用软件)...
热门文章
- 查询计算机系的所有教师,用sql查询所有计算机系的教师编号和姓名
- 2008引导修复 鼠标键盘用不了_这5个提高键盘鼠标生产力的工具,后悔没早点发现!...
- MATLAB基本运算
- mysql -a_a|MySQL基础命令
- 系统学习NLP(二十八)--GPT
- 人脸对齐(九)--SDM算法
- dell4528s linux_如何在戴尔PC上使用Ubuntu Linux终端
- 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...
- python输入一个字母标识符_Python基础入门语法和变量类型(一)
- 【数据库原理实验(openGauss)】视图