设计模式,它总结了前辈在许多方案重用代码。它是一个想法。

因为我们爱cocos2d-x,然后我们从去cocos2d-x在设计模式中,右一起学习!本篇解释未来辛格尔顿。

提cocos2d-x中间Director。我相信你应该很熟悉,使用就是利用了单例模式。

1. 什么是单例模式

单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例类的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问,从而方便对实例个数的控制并节约系统资源。假设希望在系统中某个类的对象仅仅存在一个,单例模式是最好的解决方式。

2. 实例代码

看完上面的概念,会不会有点模糊呢?没事,咱们来看一段单例模式最主要的代码。

public class Singleton
{
public: //全局訪问点
static Singleton* Singleton::getInstance()
{
if(!m_Singleton)
{
m_Singleton = new Singleton();
}
return m_Singleton;
} private: //静态变量实例
static Singleton* m_Singleton = NULL; //构造函数初始化
Singleton(); }

3. 深入分析

(1)因为每次使用newkeyword来实例化Singleton类时,都会产生一个新对象,为了保证Singleton实例的唯一性。我们须要禁止类的外部直接使用new来创建对象,因此将Singleton的构造函数的可见性设为private。

(2)类外部无法使用new来创建对象,我们须要在Singleton的内部创建,可见性仅仅对类外有效。因此。我们能够在Singleton中创建并保存这个唯一实例。为了让外界能够訪问这个唯一实例。须要在Singleton中定义一个静态的Singleton类型的私有成员变量。

(3)为了保证成员变量的封装性,我们将Singleton类型的m_Singleton对象的可见性设置为private。为了让外界使用该成员变量以及实例化该成员变量。我们须要设置一个公有的静态方法。

4. 单例模式在cocos2d-x的Director中的体现

我们来看一下Director用到单例模式的源码:

static DisplayLinkDirector *s_SharedDirector = nullptr;
Director* Director::getInstance()
{
if (!s_SharedDirector)
{
s_SharedDirector = new DisplayLinkDirector();
s_SharedDirector->init();
} return s_SharedDirector;
}

有兴趣的小伙伴。能够去查看一下Director的源码,性质上是一样的。

当然不止Director中用到了单例模式,TextureCache,SpriteFrameCache等等也用途。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

【从cocos2d-x学习设计模式】第一阶段:辛格尔顿的更多相关文章

  1. IT兄弟连 HTML5教程 HTML5的学习线路图 第一阶段学习网页制作

    学习HTML5技术可并不是简单学会几个新增的标签而已,HTML5现在可以说是前端所有技术的代名词.需要学习的语言和工具不仅多,对于刚接触他们的新人会感觉很乱.另外,前端开发也会细分很多个开发岗位,不同 ...

  2. Java学习开发第一阶段总结

    前言: 按照学院的安排我专业应该在下学期学习Java课程,因为对技术的热爱,我选择了在本学期学习Java.俗话说得好“笨鸟先飞”,那我就先学习这门课程了. 第一阶段的学习总结: 在此次阶段任务相对比较 ...

  3. JavaWeb 学习的第一阶段总结

    本人从事Asp.net开发三年,结合市场情况,综合考虑后决心转向JavaWeb方向.于是开始了自学Java的历程. 首先,我用马士兵的Java基础教学视频,快速地学习了一遍Java基础.因为有C#基础 ...

  4. PHP四个阶段目标以及第一阶段学习内容

    PHP课程体系主要分为四个阶段,第一阶段讲的是网页HTML和数据库MySQL,第一阶段要学会网页制作的基础知识,熟用各种基本标签,对数据库进行操作,各项考核都能够达标,拿出出众的项目展示. 在第二个阶 ...

  5. 自我总结(六)---(学习j2ee+j2ee第一阶段项目)

    自我完善的过程就是在不断的自我总结不断的改进. 学习了Struts2 Spring Hibernate. 十天前结束了这个课程.也考试了.这次考试老师说机试考的还不错.其实就是一个简单的用户登录,进行 ...

  6. 坚持:学习Java后台的第一阶段,我学习了那些知识

    最近的计划是业余时间学习Java后台方面的知识,发现学习的过程中,要学的东西真多啊,让我一下子感觉很遥远.但是还好我制定了计划,自己选择的路,跪着也要走完!关于计划是<终于,我还是下决心学Jav ...

  7. PHP自学,第一阶段,基础学习

    环境搭建OS X系统上 Win7执行OS X虚拟机 在 OS X上安装MAMP执行环境 IDE使用 Netbeans PHP版本号开发 数据库使用mysql 自学资料使用:PHP从入门到精通.pdf ...

  8. 嵌入式Linux学习笔记之第一阶段---基础篇

    嵌入式Linux学习分五个阶段 第一阶段: 01嵌入式环境搭建初期 02C语言语法概述 03C语言内存操作 04c语言函数 05linux基础 06gun基础 第二阶段: 01-linux之io系统编 ...

  9. JavaWeb学习第一阶段结束

    模仿狂神实现简单的用户增删改查,增加了前端登录时的密码验证 JavaWeb学习第一阶段结束,相较于第一阶段的一味学习,第二阶段想拿出更多的时间来阅读别人的源码以及跟着做简单的小项目,同时进一步深入学习 ...

  10. 第一阶段android学习笔记

    1.学习<第一行代码> 第一个android项目: 项目的注意点,如创建项目时包名具有唯一性,在做项目的时候要手动改成Project模式.还知道了引用字符串的两种方式. AS项目的三种依赖 ...

随机推荐

  1. C#验证码的另一种操作方法

    sb = new StringBuilder(); char c = '0'; string s = ""; for (int i = 0; i < 4; i++) { Ra ...

  2. 让你的 Qt 桌面程序看上去更加 native(一共六篇)

    <让你的 Qt 桌面程序看上去更加 native>是一个系列文章.在这个系列中,你将会了解到如何让你的 Qt 桌面应用程序看上去更加 native.这里,我假设你已经清楚如何使用 Qt 编 ...

  3. 信号与槽(可以与第三方库混用,首次见到QObject::destroyed的使用)

    信号与槽用于对象之间的通信.信号与槽机制是Qt的核心特性和区别于其他框架的特性. Introduction 在GUI程序中,当我们改变一个widget,经常需要其他的widget得到通知.更普遍的是, ...

  4. 分享非常有用的Java程序 (关键代码) (三)---创建ZIP和JAR文件

    原文:分享非常有用的Java程序 (关键代码) (三)---创建ZIP和JAR文件 import java.util.zip.*; import java.io.*; public class Zip ...

  5. asp.net 通过 Handler 导出数据至excel (让用户下载)

    效果图: 代码: Export2Excel.ashx <%@ WebHandler Language="C#" CodeBehind="Export2Excel.a ...

  6. 基于visual Studio2013解决算法导论之005原地随机排列数组

     题目 原地随机排列数组 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...

  7. Delphi控件下载网

    http://delphi-z.ru/index.php http://developer.team/delphi/

  8. 获取wpf datagrid当前被编辑单元格的内容

    原文 获取wpf datagrid当前被编辑单元格的内容 确认修改单元个的值, 使用到datagrid的两个事件 开始编辑事件 BeginningEdit="dataGrid_Beginni ...

  9. 基于visual Studio2013解决C语言竞赛题之1050矩阵反斜线求和

       题目 解决代码及点评 /************************************************************************/ /* 50 ...

  10. 【linux】linux根文件系统制作

    欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...