这篇文章介绍的内容是关于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();
输出的结果:
-----------------创建第一个英雄-----------------
关羽加入战场-->手持青龙偃月刀-->脚蹬赤兔马。
-----------------创建第二个英雄-----------------
刘备加入战场-->手持雌雄双剑-->脚蹬的卢马。
相关推荐: