这篇文章介绍的内容是关于PHP设计模式之抽象工厂 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
在学习过工厂方法之后,我所了解的工厂方法基本是去创建一个对象,
例如在玩游戏的时候,创建了一个关羽英雄,一个张飞英雄这样。
但是有时候程序设计时可能需要创建一组对象,这就出现了第二种创建型设计模式--抽象工厂方法(AbstractFactory)。
比方说,我在创建关羽的时候手上拿着青龙偃月刀,骑着赤兔马。
创建刘备的时候手上拿着雌雄双剑,骑着的卢马。
那么他们的兵器就需要一个类去实现,马又需要另外一个类去实现。
人物 + 兵器 +坐骑 就成了一个组合。
最后通过一个抽象工厂的模式去实现组合创建。
记录代码如下:
";
}
}
/** 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();
}
}"; $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();
输出的结果:
-----------------创建第一个英雄-----------------
关羽加入战场-->手持青龙偃月刀-->脚蹬赤兔马。
-----------------创建第二个英雄-----------------
刘备加入战场-->手持雌雄双剑-->脚蹬的卢马。
相关推荐:
原本这个程序只是本人两年前初学时练手的,最近拿出来进行了修改,所以叫XmxCms 企业网站管理系统2.0 开发环境:WinXP + VS2008 + SQLServer 2008 + Access开发语言:C#本程序采用 三层架构 + 抽象工厂设计模式 + Linq 实现,目前只做了Access 和 SQL Server ,默认数据库为Access,要更换数据库只需修改web.config 即可










