10. 星际争霸之php设计模式--原型模式
题记
==============================================================================
本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦!
本文地址:http://www.cnblogs.com/davidhhuan/p/4248189.html
==============================================================================
我们一般用new来新增对象,不过很多时候新增一个对象需要一些工作。而星际里面往往会新增某些类的大量的对象,比如新增很多机枪兵和龙骑。
待解决的问题:我们能否减少new的使用,同时避免需要新增对象的时候,了解对象的类名。
思路:php5提供了克隆方法,我们可以新增一个对象,然后每次需要新增和她同类的对象,克隆他就可以了。
原型(Prototype)模式示例:
<?php
//机枪兵类
class Marine
{
//所属的用户ID
public $playerID //构造函数,参数为用户的id
public function __construct($id)
{
$this->playerID = $id;
}
} //兵种的管理类
class TroopManager
{
//数组,用于存放多个兵种的原型
public $troopPrototype = array(); //增加原型,第一个参数为原型的名字,第二个参数为原型对象
public function addPrototype($name, $prototype)
{
$this->troopPrototype[$name] = $prototype;
} //获取原型的克隆,也就是替代new的方法,参数为原型的名字
public function getPrototype($name)
{
return clone $this->troopPrototype[$name];
}
} //初始化兵种的管理类
$manager = new TroopManager(); //初始化两个属于不同玩家的机枪兵的原型
$m1 = new Marine(1);
$m2 = new Marine(2); //增加原型,同时用比较容易记忆的名字来命名原型
$manager->addPrototype('Marine of 1', $m1);
$manager->addPrototype('Marine of 2', $m2); //当需要新增对象的时候,我们可以不必知道对象的类名和初始化的工作
$m3 = $manager->getPrototype('Marine of 1');
?>
用途总结:原型模式可以将新增对象的工作细节封装。
实现总结:需要一个原型管理类,实现增加和获取克隆原型的方法。注意这里由于为了简明,省略了一些东西,实际上我们可以在克隆方法上做一些改动,也可以用接口规范每个原型类。
相关文章:
10. 星际争霸之php设计模式--原型模式的更多相关文章
- 19. 星际争霸之php设计模式--迭代器模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 16. 星际争霸之php设计模式--组合模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 15. 星际争霸之php设计模式--策略模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 14. 星际争霸之php设计模式--状态模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 13. 星际争霸之php设计模式--正面模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 12. 星际争霸之php设计模式--模板模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 9. 星际争霸之php设计模式--代理模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 17. 星际争霸之php设计模式--职责链模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 11. 星际争霸之php设计模式--备忘模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
随机推荐
- IOS 学习资料
IOS学习资料 - 逆天整理 - 精华无密版[最新][精华] 无限互联3G学院 iOS开发视频教程UI 极客学院IOS iPhone 6的自适应布局
- sublime 3 注册码 - 亲测可用
v3114. v3103可用 —– BEGIN LICENSE —– Ryan Clark Single User License EA7E-812479 2158A7DE B690A7A3 8EC0 ...
- unity3d插件Daikon Forge GUI 中文教程3-基础控件Button和Sprite的使用
2.2添加一个按钮Button 来看看特有的属性:Button Properties Data 显示的文本 Behavior 中的几个: Aoto Size 选中时就是按钮的背景会根据Data中的文本 ...
- Datatable转换Json
#region Datatable转换为Json /// <summary> /// Datatable转换为Json /// </su ...
- java AES 加密与解密
package com.ss.util.secret; import java.io.UnsupportedEncodingException; import java.security.Inva ...
- Python使用split使用多个字符分隔字符串
Python的str类有split方法,但是这个split方法只能根据指定的某个字符分隔字符串,如果要同时指定多个字符来分隔字符串,该怎么办呢? 幸运的是python的re模块中提供的split方法可 ...
- freemarker判断对象是否为空
freemarker中显示某对象使用 ${name}. 但如果name为null,freemarker就会报错.如果需要判断对象是否为空: <#if name??> …… </# ...
- eclipse工程加入jquery.min.js报错:missing semicolon
1,注释修改项目目录下的.project文件 <?xml version="1.0" encoding="UTF-8"?> <projectD ...
- oracle课堂笔记
1.DOS登录1.1.sqlplus 输入用户名.密码1.2.sqlplus /nolog conn 用户名/密码@ip地址/数据库名称 [如果是sys登录则必须加上as sysdba ,as sys ...
- ArcGIS Server GP服务发布与测试(基础版)
版本:ArcGIS Server 10.4 环境:win10 测试目标:创建一个GP服务,功能为根据要素属性信息(如FID)选择出输入内容的对应匹配要素. 注:这个测试非常基础,仅供新手发布GP ...