享元模式

当显示机枪兵状态时,绘制工厂会判断机枪兵实例是否已经存在了
如果存在了就直接返回
//如果把
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);//机枪兵某一个状态显示

?>
原文地址:https://www.cnblogs.com/jiufen/p/5000195.html