php 抽象工厂类实例,PHP设计模式之抽象工厂
这篇文章介绍的内容是关于PHP设计模式之抽象工厂 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
在学习过工厂方法之后,我所了解的工厂方法基本是去创建一个对象,
例如在玩游戏的时候,创建了一个关羽英雄,一个张飞英雄这样。
但是有时候程序设计时可能需要创建一组对象,这就出现了第二种创建型设计模式--抽象工厂方法(AbstractFactory)。
比方说,我在创建关羽的时候手上拿着青龙偃月刀,骑着赤兔马。
创建刘备的时候手上拿着雌雄双剑,骑着的卢马。
那么他们的兵器就需要一个类去实现,马又需要另外一个类去实现。
人物 + 兵器 +坐骑 就成了一个组合。
最后通过一个抽象工厂的模式去实现组合创建。
记录代码如下:<?php
/** Hero
* 定义一个英雄接口
*/
interface Hero
{
function CreateHero();
}
/** GuanYu
* 关羽英雄类
*/
Class GuanYu implements Hero
{
function CreateHero()
{
echo "关羽加入战场-->";
}
}
/** LiuBei
* 刘备英雄类
*/
Class LiuBei implements Hero
{
function CreateHero()
{
echo "刘备加入战场-->";
}
}
/** Weapon
* 定义一个兵器接口
*/
interface Weapon
{
function CreateWeapon();
}
/** GuanYuWeapon
* 青龙偃月刀的类
*/
Class GuanYuWeapon implements Weapon
{
function CreateWeapon()
{
echo "手持青龙偃月刀-->";
}
}
/** LiuBeiWeapon
* 雌雄双剑的类
*/
Class LiuBeiWeapon implements Weapon
{
function CreateWeapon()
{
echo "手持雌雄双剑-->";
}
}
/** Horse
* 定义一个坐骑接口
*/
interface Horse
{
function CreateHorse();
}
/** ChiTu
* 赤兔马类
*/
Class ChiTu implements Horse
{
function CreateHorse()
{
echo "脚蹬赤兔马。";
}
}
/** DiLu
* 的卢马类
*/
Class DiLu implements Horse
{
function CreateHorse()
{
echo "脚蹬的卢马。";
}
}
/** AbstractFactory
* 抽象工厂接口 为子类建立标准
* LoadingHero 加载人物类方法
* LoadingWeapon 加载武器类方法
* LoadingHorse 加载坐骑类方法
*/
interface AbstractFactory
{
function LoadingHero();
function LoadingWeapon();
function LoadingHorse();
}
/** GFactory
* 关羽英雄创建工厂类 用于客户端调用
*/
Class GFactory implements AbstractFactory
{
function LoadingHero()
{
return new GuanYu();
}
function LoadingWeapon()
{
return new GuanYuWeapon();
}
function LoadingHorse()
{
return new ChiTu();
}
}
/** LFactory
* 刘备英雄创建工厂类 用于客户端调用
*/
Class LFactory implements AbstractFactory
{
function LoadingHero()
{
return new LiuBei();
}
function LoadingWeapon()
{
return new LiuBeiWeapon();
}
function LoadingHorse()
{
return new DiLu();
}
}<?php
// 抽象工厂模式 index.php
header("Content-Type:text/html;charset=utf-8");
require_once "AbstractFactory.php";
echo "-----------------创建第一个英雄-----------------
";
$GY = new GFactory(); // 调用第一个英雄的工厂
// 加载各自的创建方法
$GYHero = $GY->LoadingHero();
$GYWeapon = $GY->LoadingWeapon();
$GYHorse = $GY->LoadingHorse();
// 生成加入战场
$GYHero->CreateHero();
$GYWeapon->CreateWeapon();
$GYHorse->CreateHorse();
echo "
";
echo "-----------------创建第二个英雄-----------------
";
$LB = new LFactory(); // 调用第一个英雄的工厂
// 加载各自的创建方法
$LBHero = $LB->LoadingHero();
$LBWeapon = $LB->LoadingWeapon();
$LBHorse = $LB->LoadingHorse();
// 生成加入战场
$LBHero->CreateHero();
$LBWeapon->CreateWeapon();
$LBHorse->CreateHorse();
输出的结果:
-----------------创建第一个英雄-----------------
关羽加入战场-->手持青龙偃月刀-->脚蹬赤兔马。
-----------------创建第二个英雄-----------------
刘备加入战场-->手持雌雄双剑-->脚蹬的卢马。
相关推荐:
php 抽象工厂类实例,PHP设计模式之抽象工厂相关推荐
- java 用映射写工厂类_java23种设计模式——三、工厂模式
目录 工厂模式 工厂模式介绍 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为 ...
- java工厂模式实例(设计模式)
目录 java工厂模式 工厂模式其实又分为三种 1.简单工厂模式: 简单工厂模式(非静态) 简单工厂模式(静态): 2.工厂方法模式: 3.抽象工厂模式: java工厂模式 开篇声明,此理解为作者自身 ...
- 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细
1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...
- java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式
抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...
- php设计一个盒子类代码_PHP设计模式之简单工厂模式(Simple Factory)代码实例大全(七)...
目的[1] 简单工厂模式是一个精简版的工厂模式. 它与静态工厂模式最大的区别是它不是『静态』的.因为非静态,所以你可以拥有多个不同参数的工厂,你可以为其创建子类.甚至可以模拟(Mock)它,这对编写可 ...
- java静态工厂方法模式_设计模式:简单工厂模式(静态工厂方法模式)
简单工厂的构成包括三个角色: 1)抽象产品类 2)具体产品类(继承抽闲产品类) 3)工厂类(生产具体产品) 具体代码实现 1.抽象产品类 /** * 抽象类 */ public abstract cl ...
- java 工厂模式 计算器_java设计模式之简单工厂模式
在编写一个计算器程序时,可以将业务逻辑和显示分离,业务逻辑封装为一个类(封装):如果要新添加一种运算,可以先创建一个Operation的基类,然后各种运算从Operation类继承,并实现GetRes ...
- java 工厂类静态方法,为什么要在JAVA工厂模式中使用静态方法
工厂方法模式( Factory Method ):定义一个用于创建对象的接口 IFactory,在具体的ConcreteFactory子类中根据传进的参数即具体子类ConcreteProduct决定实 ...
- 《JavaSE-第七章》之抽象的类-实例的对象-合理的封装
前言 之前我们所写的代码几乎都是在main方法里面,我们也操作了一些对象如String,Math等.但是将大量的代码写入main里面不是面向对象编程的做法,接下来我们将脱离面向过程,走向面向对象,慢慢 ...
最新文章
- Python绘制简单函数曲线(包括坐标范围限制、刻度指定)
- 安装 | Windows 10下基于Anaconda平台的TensorFlow详细安装步骤
- 每周一算法之六——KMP字符串匹配算法
- .NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书
- Wordpress基础:精简头部wp_head
- MYSQL性能优化(转)
- EMC-- DFC --Sessions and Session Managers
- 安卓gridview条目点击事件_敬业签的安卓手机版设置便签按正序排序教程
- win7和xp无线共享网络问题
- 数值分析期末考试复习(逼近问题)
- mysql触发器 实例_mysql触发器的三个例子
- Halcon 入门教程(01)
- linux内存中的文件权限,Linux系统管理(用户权限、磁盘存储、文件系统、内存、进程)...
- Unity中迭代器和协程的部分概念
- MAC版本subline text快捷键大全
- 壁纸最佳分辨率尺寸表
- 【杂七杂八】Dreamweaver在Surface高分辨率下工具栏字体和按钮太小的解决办法
- transition和transition的区别
- 一个汽车软件测试工程师的三年工作总结
- python笔迹识别_python_基于KNN算法的笔迹识别
热门文章
- tess 英文字库(eng.traineddata)
- 语言模型(LM)介绍及实操
- Windows串口编程
- VUE程序运行过程-runtime-complier和runtime-only的区别
- 测试用例的力度和评审、测试用例的本质
- IoT黑板报0217:Alphabet联网气球项目取得新突破
- 佳能EOS R3评测
- oracle按时间段过滤查询,oracle 取某个时间段的数据(每周几的上午几点到几点)...
- win10+linux双系统给linux系统分区内存扩容
- (二十二)岁月无声 - 7