当前位置: 首页 > news >正文

东莞网站建设推广多少钱烟台h5网站建设公司

东莞网站建设推广多少钱,烟台h5网站建设公司,淮南电商网站建设费用,网站建设公司十年乐云seo单例模式的定义 保证一个类只有一个实例#xff0c;并且提供了访问该实例的全局访问点。 定义这种东西一般都是不说人话的#xff0c;要想要理解这句话的意思#xff0c;我们得把它揉开了才能搞明白。 我们先看前半句 “保证一个类只有一个实例”#xff0c;单例一般使用…单例模式的定义 保证一个类只有一个实例并且提供了访问该实例的全局访问点。 定义这种东西一般都是不说人话的要想要理解这句话的意思我们得把它揉开了才能搞明白。 我们先看前半句 “保证一个类只有一个实例”单例一般使用类来实现也就是说这个单例类其有且只能有一个实例化的对象instance一旦出现多个就不是单例模式。 后半句“并且提供了访问该实例的全局访问点”这句话的意思是这个实例化的对象是全局可见的任何系统任何类都可以访问这个实例化的单例对象。有这个特性存在是因为单例模式的存在就是为了提供便利的访问全局可见保证了这种便利性。 如何实现单例 单例的实现方法很简单最传统的方法如下 class FileSystem { public:static FileSystem instance(){// 惰性初始化也就是我们说的“懒汉式”if (instance_ NULL) instance_ new FileSystem();return *instance_;}private:FileSystem() {}static FileSystem* instance_; };这个类的构造函数是私有的这保证了外部无法实例化这个类的对象。只能通过获取instance()获得实例保证了单例性。 现在还有一种现代的写法这种单例的写法可以保证在实例化这个对象的过程是线程安全的如下 class FileSystem { public:static FileSystem instance(){static FileSystem *instance new FileSystem();return *instance;}private:FileSystem() {} };由于本地静态变量只会初始化一次这保证了其前程安全性。而上一段的代码则不是线程安全的。 注意单例类本身的线程安全是个不同的问题这里只保证了它的初始化没问题。 单例的优点是什么 懒汉式保证了如果没有人使用就不会创建这个单例 运行时实例化保证了单例可以获取到它需要的所有信息因为有些信息是只能在运行的时候才能出现。 单例可继承而使用时候我们只需要基类的单例指针就可以通过指向不同的子类对象来实现不同的需求。例如你要做一个跨平台的封装器我们用单例模式试试 class FileSystem { public:static FileSystem instance();virtual ~FileSystem() {}virtual char* readFile(char* path) 0;virtual void writeFile(char* path, char* contents) 0;protected:FileSystem() {} };其子类可以是这样 class PS3FileSystem : public FileSystem { public:virtual char* readFile(char* path){// 使用索尼的文件读写API……}virtual void writeFile(char* path, char* contents){// 使用索尼的文件读写API……} };class WiiFileSystem : public FileSystem { public:virtual char* readFile(char* path){// 使用任天堂的文件读写API……}virtual void writeFile(char* path, char* contents){// 使用任天堂的文件读写API……} };获取单例的方法我们就这么写 FileSystem FileSystem::instance() {#if PLATFORM PLAYSTATION3static FileSystem *instance new PS3FileSystem();#elif PLATFORM WIIstatic FileSystem *instance new WiiFileSystem();#endifreturn *instance; }通过这种方式 整个代码库都可以使用FileSystem::instance()接触到文件系统而无需和任何平台相关的代码耦合。 单例的缺点 单例是全局的大量使用这种全局对象会让你很难debug。 全局意味着所有的对象都能访问单例这也促使了耦合的发生。比如你在物理系统里连接了成就系统。 单例模式让线程同步成为了一个大问题。可能会频繁出现死锁竞争状态以及其他很难解决的线程同步问题。 懒汉式初始化等于剥夺了你的控制权。如果游戏在运行到关键的时候初始化了一个单例这游戏不就卡了。 有什么方法可以避免 每次在使用单例的时候问问自己是否真的需要它。例如你的游戏里有一堆的manager但有些manager是不是删了也行 有个单例是好事但是可以不要让它是全局的。例如这样写 class FileSystem { public:FileSystem(){assert(!instantiated_);instantiated_ true;}~FileSystem() { instantiated_ false; }private:static bool instantiated_; };bool FileSystem::instantiated_ false;这段代码和之前单例的代码的不同在于 任何人都可以构建这个对象但是只能构建一次。在运行的时候如果别人想要构建这个对象就会报错。 这段代码保证了没有其他代码可以接触实例或者创建自己的实例。 这个实现的缺点是只在运行时检查并阻止多重实例化。 单例模式正相反通过类的自然结构在编译时就能确定实例是单一的。 从别的地方获取单例而不是从全局。 例如你可以通过传参把你要的东西传进来而不是写单例你也可以从基类中取得亦或者你从已经是全局的对象中获取你要的对象。还有一种方法是利用服务定位器模式来提供全局访问这个模式会在后续的章节中揭露。 原文链接https://gpp.tkchu.me/singleton.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8%E5%AE%83
http://www.zqtcl.cn/news/646976/

相关文章:

  • 网站开发 浏览器济宁网站建设服务
  • 整套网站建设网站开发中如何实现gps定位
  • 网站建设计划表福州自助建站
  • 网站做的比较好的公司吗2017年做网站多少钱
  • 基础展示营销型型网站重庆百度总代理
  • 网站建设 技术可行性这是我自己做的网站
  • 西安网站策划关键词优化哪家好
  • 能看建设动漫黄图的网站海外仓一件代发平台
  • 做网站都需要了解什么大连福佳新城2026年建站吗
  • php 网站部署到服务器泉州模板建站哪家好
  • 网站服务器上的跳转选择怎么做网站是怎么建立的
  • 网站后台目录如何保护公司网站建设需要要求什么软件
  • 四川省建设厅网站官网自己做的网站能上传到凡科吗
  • 米拓网站建设-app定制开发免费个人建站系统
  • 网站改版公司如何帮公司做网站
  • 曹县汽车网站建设网站怎么做才 吸引人
  • 河南周口东宇网站建设wordpress怎么重新安装插件
  • wordpress无法上传主题南通做网站优化公司
  • 做彩票网站能挣到钱吗南充市房产信息网
  • 沧州北京网站建设金华网站建设哪个公司好点
  • 北京朝阳建站优化wordpress主题访问慢
  • wordpress最快仿站酷炫个人特别网站
  • 公司建站详细步骤如何注册一家公司要多少钱
  • 网站推广网络营销山西大学物理电子工程学院研招网
  • 亚马逊做国际外贸在哪个网站毕业设计网站开发选题依据
  • 镇江网站排名优化费用app软件开发平台游戏
  • 襄阳网站建设xytzg南通网站建设top
  • 有没有做产品团购的网站2d动画制作软件
  • 成都网站排名生客seo杭州专业网站制作设计
  • 阿里云 企业 网站四平市网站建设