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 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
PHP 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
PHP 文件系统详解
Sep 13 PHP
php 不使用js实现页面跳转
Feb 11 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
PHPUnit安装及使用示例
Oct 29 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
实例介绍PHP删除数组中的重复元素
Mar 03 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
php实现的RSS生成类实例
2015/04/23 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
js实现鼠标点击页面弹出自定义文字效果
2019/12/24 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
使用Python实现一个简单的项目监控
2015/03/31 Python
python list格式数据excel导出方法
2018/10/31 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
Hotels.com印度:酒店预订
2019/05/11 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
2015年体育教师个人工作总结
2015/05/12 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
《实心球》教学反思
2016/02/23 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
Python import模块的缓存问题解决方案
2021/06/02 Python