您的位置:首页 > 其它

享元模式

2015-11-27 11:46 211 查看
当显示机枪兵状态时,绘制工厂会判断机枪兵实例是否已经存在了
如果存在了就直接返回


//如果把
static private $flyweights;
//改为
private $flyweights;
//对应的self::改成$this为什么不行呢???


<?php

//机枪兵享元
class MarineFlyweight
{
public function __construct()
{
//第一次实例化时输出,来对比下,第二次使用时,还会不会再实例化一个
echo "实例化了一次!";
}
//绘制机枪兵的图像动画,参数为状态,比如属于哪一个玩家
public function drawMarine($state)
{
//绘制机枪兵
echo "机枪兵享元!".$state;
}

}

//享元工厂
class FlyweightFactory
{
//享元数组,用于存放多个享元
static private $flyweights;
//获取享元的方法
public function getFlyweight($name)
{
if (!isset(self::$flyweights[$name]))
{
$obj = $name."Flyweight";
self::$flyweights[$name] = new $obj();
}
return self::$flyweights[$name];
}
}

$flyweightFactory = new FlyweightFactory();//初始化享元工厂
$marine = $flyweightFactory->getFlyweight("Marine");//绘制一个机枪兵
$status = "我还有3滴血!";
$marine->drawMarine($status);//机枪兵某一个状态显示

$marine = $flyweightFactory->getFlyweight("Marine");//绘制一个机枪兵
$status = "我还有2滴血!";
$marine->drawMarine($status);//机枪兵某一个状态显示

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: