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