php 抽象工厂模式,PHP设计模式(三)抽象工厂模式(Abstract Factory)
一、什么是抽象工厂模式
抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件:
系统中有多个产品族,而系统一次只可能消费其中一族产品。
同属于同一个产品族的产品可以使用。
产品族:位于不同产品等级结构中,功能相关联的产品组成的家族。下面例子的 汽车和空调就是两个产品树, 奔驰C200+格力某型号空调就是一个产品族, 同理, 奥迪A4+海尔某型号空调也是一个产品族。
二、类图
三、案例
产品类
// 汽车(抽象产品接口)
interface AutoProduct
{
public function dirve();
}
//奥迪A4(具体产品类)
class AudiA4Product implements AutoProduct
{
//获取汽车名称
public function dirve()
{
echo "开奥迪A4"."
";
}
}
//奔驰C200(具体产品类)
class BenzC200Product implements AutoProduct
{
//获取汽车名称
public function dirve()
{
echo "开奔驰C200"."
";
}
}
//空调(抽象产品接口)
interface AirCondition
{
public function blow();
}
//格力空调某型号(具体产品类)
class GreeAirCondition implements AirCondition
{
public function blow()
{
echo "吹格力空调某型号"."
";
}
}
//海尔空调某型号(具体产品类)
class HaierAirCondition implements AirCondition
{
public function blow()
{
echo "吹海尔空调某型号"."
";
}
}
工厂类
//工厂接口
interface Factory
{
public function getAuto();
public function getAirCondition();
}
//工厂A = 奥迪A4 + 海尔空调某型号
class AFactory implements Factory
{
//汽车
public function getAuto()
{
return new AudiA4Product();
}
//空调
public function getAirCondition()
{
return new HaierAirCondition();
}
}
//工厂B = 奔驰C200 + 格力空调某型号
class BFactory implements Factory
{
//汽车
public function getAuto()
{
return new BenzC200Product();
}
//空调
public function getAirCondition()
{
return new GreeAirCondition();
}
}
客户端类
//客户端测试代码
$factoryA = new AFactory();
$factoryB = new BFactory();
//A工厂制作车
$auto_carA = $factoryA->getAuto();
$auto_airA = $factoryA->getAirCondition();
//B工厂制作车
$auto_carB = $factoryB->getAuto();
$auto_airB = $factoryB->getAirCondition();
//开奥迪车+吹海尔空调
$auto_carA->dirve();
$auto_airA->blow(); //热的时候可以吹吹空调
//开奔驰车+吹格力空调;
$auto_carB->dirve();
$auto_airB->blow(); //热的时候可以吹吹空调
四、抽象工厂模式的组成
抽象工厂(AbstractFactory):确定工厂的业务范围。
具体工厂(ConcreteFactory):每个具体工厂对应一个产品族。具体工厂决定生产哪个具体产品对象。
抽象产品(AbstractProduct):同一产品等级结构的抽象类。
具体产品(ConcreteProduct):可供生产的具体产品。
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
三种工厂的比较
简单工厂 :用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
参考
系列源地址
系列目录
php 抽象工厂模式,PHP设计模式(三)抽象工厂模式(Abstract Factory)相关推荐
- mysql工厂模式_设计模式-三种工厂模式实例
1.简单工厂模式:代替new产生对象,产品的类型比较少时. 我们要获得三种不同的数据库对象,如Mysql,SQLserver,Oracle,它们拥有共同的特征,即可以进行抽象,简单工厂目的是将获得具体 ...
- 设计模式三—抽象工厂模式
设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...
- 浅析设计模式(三)——抽象工厂模式
抽象工厂模式(Abstract-Factory,创建型模式) 本文的结构: 一.抽象工厂模式的定义 二.抽象工厂模式的参与者及其角色 三.抽象工厂模式的类图 四.抽象工厂模式的示例 五.参考 一.抽象 ...
- 抽象工厂模式_设计模式(3) 抽象工厂模式
抽象工厂模式 优化抽象工厂 异步工厂 在学习抽象工厂模式前,先来回顾一下前面的简单工厂和工厂方法模式.简单工厂的职责非常简单:构造某个实体类型,然后把实例作为抽象类型返回: 工厂方法模式则进一步抽象出 ...
- 抽象工厂模式_设计模式系列—抽象工厂模式
前言 23种设计模式速记 单例(singleton)模式 工厂方法(factory method)模式 23种设计模式快速记忆的请看上面第一篇,前面说完了工厂方法模式,我们发现工厂方法模式存在一个严重 ...
- python抽象工厂模式_Python设计模式之抽象工厂模式
Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...
- java设计模式---三种工厂模式之间的区别
简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...
- java设计模式---三种工厂模式
工厂模式提供创建对象的接口. 工厂模式分为三类:简单工厂模式(Simple Factory), 工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory). GOF ...
- java 用映射写工厂类_java23种设计模式——三、工厂模式
目录 工厂模式 工厂模式介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为 ...
- 什么java工厂模式_java的三种工厂模式是什么?
java的三种工厂模式:1.简单工厂模式,提供一个创建对象实例的功能,而无须关心其具体实现:2.工厂方法模式:3.抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类. 一. ...
最新文章
- air调用java,AIR2.0入门教程:与Java应用交互
- 【BZOJ】1630: [Usaco2007 Demo]Ant Counting(裸dp/dp/生成函数)
- c#一种存储结构解决动态平衡问题
- springboot + kafka
- 微信搜一搜又推出了新功能!搜“医保码”直达医保页面
- 一个简单的键值存储微服务
- 出现红字是电脑问题吗_苹果12还会出现信号不好的问题吗?
- 基于深度学习的计算机视觉技术在无人驾驶中的应用
- 【Python-3.5】绘制随机漫步图
- ❤️关于 idea 安装 Vue 插件后新建文件不显示 Vue Component 的问题及解决方法❤️
- Dijkstra(堆优)模板
- 阁下可知文言编程之精妙?文言文亦能编程!此诚年度最骚语言也,数天6K星...
- 遥控器进入鼠标模式,退出鼠标模式,上下左右移动和确认
- TRC文件转ASC文件
- PR转场 700+抖音视频转场素材包含PR调色预设和音效素材
- 腾格尔发新歌《遥远的地方》,成都邓秀菊自发红包朋友圈寻歌词
- bandizip右键选项设置方法步骤
- php 定义宏函数,汇编语言宏函数
- JavaScript中deferred对象浅析
- 2021年中国疫苗行业批签发批次、批签发量及行业发展前景分析:批签发批次增长,签发量下降,未来疫苗需求增加,集中度提高[图]