1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php 抽象工厂类实例 PHP设计模式之抽象工厂

php 抽象工厂类实例 PHP设计模式之抽象工厂

时间:2020-09-08 00:43:38

相关推荐

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

输出的结果:

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

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

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

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

相关推荐:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。