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();

输出的结果:

-----------------创建第一个英雄-----------------

关羽加入战场-->手持青龙偃月刀-->脚蹬赤兔马。

-----------------创建第二个英雄-----------------

刘备加入战场-->手持雌雄双剑-->脚蹬的卢马。

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值