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

靓号注册网站免费app的制作费用

靓号注册网站免费,app的制作费用,重庆手机网站制作价格,购物网站开发背景需求什么是单例模式单例模式作为设计模式中极具代表性的经典范式,不仅是日常开发里频繁使用的创建型模式,更是各类技术考核中的高频考点。其核心设计目标在于严格保证一个类在整个系统生命周期内仅存在唯一实例,同时提供一个简洁、统一的全局访问…

什么是单例模式

单例模式作为设计模式中极具代表性的经典范式,不仅是日常开发里频繁使用的创建型模式,更是各类技术考核中的高频考点。其核心设计目标在于严格保证一个类在整个系统生命周期内仅存在唯一实例,同时提供一个简洁、统一的全局访问入口,让系统中的任何模块都能便捷地获取并操作这个实例。

这种模式通过巧妙的构造机制规避了类的重复实例化,既节省了不必要的资源消耗,又确保了全局状态的一致性,在配置管理、工具类封装、线程池等场景中展现出不可替代的价值。

什么是设计模型

IT行业这么火,涌入的人很多。俗话说林子大了啥鸟都有,以至于大佬和菜鸡们两极分化的越来越严重。为了让菜鸡们不太拖大佬的后腿,于是大佬们针对一些经典的常见的场景,给定了一些对应的解决方案。这个就是设计模式。

单例模式的特点

某些类,只应该具有一个对象(实例),就称之为单例。

例如一个男人只能有一个媳妇。

在很多服务器开发场景中,经常需要让服务器加载很多的数据 (上百G) 到内存中。此时往往要用一个单例的类来管理这些数据。

单例模式的实现方式

单例模式的实现方式分为两种

  1. 饿汉实现方式
  2. 懒汉实现方式

我们拿洗碗的例子来做比较

吃完饭,立刻洗碗,这种就是饿汉方式。因此下一顿吃的时候可以立刻拿着碗就能吃饭。

吃完饭,先把碗放下, 然后下一顿饭用到这个碗了再洗碗,就是懒汉方式。

懒汉方式最核心的思想是“延时加载”,从而能够优化服务器的启动速度。

比方说系统中的malloc,当调用malloc后,是仅系统允许你可以去访问,只有当你真正的去访问的时候,才会发生缺页中断,此时才会真正的申请到空间。其本质就类似于懒汉。

饿汉方式实现单例模式

template <typename T>
class Singleton 
{static T data;
public:static T* GetInstance() {return &data;}
};
  • 由于我们在类成员变量前加了static,使其变为了静态成员变量,在程序启动时初始化。而不是在实例化时才创建。
  • 我们的GetInstance被static修饰,其函数属于类,而非对象,不能访问非静态成员。
  • 除此之外,我们只有通过Sigleton这个包装类才可以使用T对象,则一个进程中只有一个T对象的实例。
  • GetInstance() 只是返回已经存在的实例,它既没有检查 data 是否为空,也没有在第一次调用时创建 data,而是直接返回 &data。这说明 data 的初始化是 提前完成的,而不是 按需加载

懒汉方式实现单例模式

template <typename T>
class Singleton 
{static T* inst;
public:static T* GetInstance() {if (inst == NULL) {inst = new T();} return inst;}
};
  • 同样,由于我们在类成员变量前加了static,使其变为了静态成员变量,在程序启动时初始化。而不是在实例化时才创建。
  • 同样,我们的GetInstance被static修饰,其函数属于类,而非对象,不能访问非静态成员。
  • 除此之外,我们只有通过Sigleton这个包装类才可以使用T对象,则一个进程中只有一个T对象的实例。
  • 当第一次调用GetInstance时,此时就会发现inst还未进行初始化,此时第一次就会进行初始化。其为动态分配,按需加载。

但这里存在一个严重的问题:线程不安全。

第一次调用 GetInstance 的时候,如果两个线程同时调用,可能会创建出两份 T 对象的实例。但是后续再次调用,就没有问题了。虽然说是线程不安全,但此时还是符合单例模式的,只是进行了两次或多次初始化。会导致,导致内存泄漏与数据二义性。

那么如何改进呢?主要思想还是进行加锁。

懒汉方式实现单例模式(线程安全版本)

// 懒汉模式, 线程安全
template <typename T>
class Singleton 
{volatile static T* inst; // 需要设置 volatile 关键字, 否则可能被编译器优化.static std::mutex lock;
public:static T* GetInstance() {if (inst == NULL) { // 双重判定空指针, 降低锁冲突的概率, 提高性能.lock.lock(); // 使用互斥锁, 保证多线程情况下也只调用一次 new.if (inst == NULL) {inst = new T();}  lock.unlock();} return inst;}
};

注意事项:加锁解锁的位置,双重if判断,避免不必要的锁竞争。volatile关键字防止过度优化。

除了此,对于单例模式,还需要将拷贝函数删除了,其主要也是保证单个进程仅可初始化一个实例对象。采用c++11的模式删除。

Singleton(const Singleton&) = delete;

http://www.dtcms.com/a/425893.html

相关文章:

  • 临沂专业网站建设设计公司哪个网站可以做淘宝代码
  • 佛山网站建设 乐云践新专家施工企业的描述
  • 什么公司网站建设比较好没有网站百度推广吗
  • 做旅游计划上哪个网站html代码特效
  • 做网站怎么找客户联系方式网站美工建设软件
  • 招商网站开发文档微信公众号做微网站
  • 一个网站seo做哪些工作龙岩网店运营招聘
  • 广西柳州网站建设公司多媒体展厅设计制作公司
  • 高平企业网站博物馆网站建设公司
  • ps做网站要多大如何做强企业网站
  • 南京市网站建设公司足球队世界排名榜
  • 做网站首页图的规格东莞网站建设 石化
  • 柳州高端网站建设在深圳怎么注册一家公司
  • 我的家乡网站建设模板穿搭速递html网页制作代码
  • 宁波市国家高新区建设局网站扬州建站公司
  • 网站的设计需要什么开发网站需要多久
  • 做网站的系统设计网站数据流程
  • 专业开发网站建设wordpress 下拉式菜单
  • 凡科可以做返利网站吗wordpress如何创建数据库
  • 视频网站开发的视频放在哪北京网站建设 乐云seo
  • 用flash做游戏下载网站科学城做网站公司
  • 网站建设公司苏州网站设计网
  • 登录网站怎么做河南卫生基层系统网站建设
  • 做智能网站seo中文含义
  • dedecms调取友情链接 网站类型闽侯网站建设
  • 免费商城自助建站企业网站开发的文献综述
  • 博尔塔拉州大型网站建设建设展示类网站的意义
  • 网站建设与规划alexa全球网站排名
  • 腾讯建设网站视频下载湖南网站建设大全
  • 网站建设特效大全电商云仓