php设计模式之原型模式分析【星际争霸游戏案例】


Posted in PHP onMarch 23, 2020

本文实例讲述了php设计模式之原型模式。分享给大家供大家参考,具体如下:

我们一般用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');
?>

用途总结:原型模式可以将新增对象的工作细节封装。

实现总结:需要一个原型管理类,实现增加和获取克隆原型的方法。注意这里由于为了简明,省略了一些东西,实际上我们可以在克隆方法上做一些改动,也可以用接口规范每个原型类。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
非常精妙的PHP递归调用与静态变量使用
Dec 16 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
Django 中 cookie的使用
Aug 17 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
PHP code 验证码生成类定义和简单使用示例
May 27 PHP
php框架知识点的整理和补充
Mar 01 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 #PHP
PDO实现学生管理系统
Mar 21 #PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 #PHP
YII2框架使用控制台命令的方法分析
Mar 18 #PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 #PHP
You might like
php 表单数据的获取代码
2009/03/10 PHP
php下载文件的代码示例
2012/06/29 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
详解vue 组件注册
2020/11/20 Vue.js
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
python使用matplotlib库生成随机漫步图
2018/08/27 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
Python 字符串池化的前提
2020/07/03 Python
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
中队活动总结
2014/08/27 职场文书
解除租房协议书
2014/12/03 职场文书
关于迟到的检讨书
2015/05/06 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
环保建议书作文500字
2015/09/14 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python
nginx.conf配置文件结构小结
2022/04/08 Servers