前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【1/25】将Game改写为单例模式(Singleton Pattern)

【1/25】将Game改写为单例模式(Singleton Pattern)

作者头像
LIYI
发布2021-02-23 16:05:03
4300
发布2021-02-23 16:05:03
举报
文章被收录于专栏:艺述论专栏

Game的实例在游戏时只有一个,现在我们首先将Game类改造为一个单例。所谓单例,就是运行时只有一个实例。Game.js代码改造如下:

代码语言:javascript
复制
// 游戏对象
class Game {
  // 单例
  static getInstance() {
    if (!this.instance) {
      this.instance = new Game()
    }
    return this.instance;
  }
  ...

但是这个代码是有问题的,因为我们在Game.js文件的下方通过new关键字实例化过这个类:

代码语言:javascript
复制
/// 开始
const game = new Game()
GameGlobal.game = game
game.init()
game.start()

有两种方法解决这个问题。一种是修改单例方法getInstance代码的实现,将全局单例的实例化放在结构器中:

代码语言:javascript
复制
class Game {
  // 单例
  static getInstance() {
    // if (!this.instance) {
    //   this.instance = new Game()
    // }
    return this.instance;
  }
  ...
  constructor() { 
    if (!Game.instance) {
      Game.instance = this
    }
  }
  ...

另一种方法是修改Game.js文件的底部代码,在消费代码处实例化Game类的方式:

代码语言:javascript
复制
/// 开始
// const game = new Game()
const game = Game.getInstance()
GameGlobal.game = game
...

我们在这里采用第二种方法。将Game单例化,将为我们接下来应用其它设计模式打下基础。除了可以使用Game.getInstance()获取当前游戏的实例,还可以通过全局变量GameGlobal.game获取,第二种获取方式我们将在下一小节使用。

阶段源码

本小节阶段源码见:disc/第五章/5.1.1。

我讲明白没有,欢迎提问。

2021年1月26日

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 艺述论 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 阶段源码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档