享元模式
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);//机枪兵某一个状态显示 ?>
相关文章推荐
- Linux中将网络管理器由NetworkManager切换为systemd-network
- win10输入法切换不了怎么办?win10无法切换输入法现象的解决方法
- OPENCV249 编译静态库(含CUDA,OPENCL)
- C语言编程优化运行速度
- IOS技术调研
- SQL笔记(5)_第五章 操作数据
- Pycharm5注册方式
- 关于“创业者与VC见面的10个不成文细节点”
- Ubuntu关闭图形界面
- 定时且周期性的任务研究I--Timer
- ASP.NET repeater添加序号列的方法
- [基础] - Python中的@property
- 培训机构毕业的程序员被歧视的背后逻辑
- 解决webstorm本地IP访问页面出错的问题
- 微信公众号开发
- goke 交叉编译gdb
- AndroidL 源码编译 预置GMS包与第三方应用 系统属性管理
- mybatis中的resultMap
- 用C语言获取任意文件的长度(可能大于2GB)#define _FILE_OFFSET_BITS 64
- SQL 数据库分页语句