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

备案网站名称怎么写个人优化软件有哪些

备案网站名称怎么写个人,优化软件有哪些,大型购物网站服务器,如何用wordpress建一个网站文章目录 一. 设计模式二. 单例模式三. 饿汉模式四. 懒汉模式结束语 一. 设计模式 单例模式是一种设计模式 设计模式(Design Pattern)是一套被反复使用,多数人知晓的,经过分类的,代码设计经验的总结。 为什么要有设计模式 就像人类历史发展会…

文章目录

  • 一. 设计模式
  • 二. 单例模式
  • 三. 饿汉模式
  • 四. 懒汉模式
  • 结束语

一. 设计模式

单例模式是一种设计模式
设计模式(Design Pattern)是一套被反复使用,多数人知晓的,经过分类的,代码设计经验的总结

为什么要有设计模式

就像人类历史发展会产生兵法,最开始部落之间打仗都是谁人多谁获胜。但后来春秋战国时期,七国之间经常战争,发现战争也是有套路的,后来孙子就总结了《孙子兵法》。设计模式也是如此。

设计模式可以提高代码的可重用性,让代码更容易被他人理解,保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一般

二. 单例模式

一个类只能创建一个对象,即单例模式,该模式可以保证系统重该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享

比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理

单例模式有两种实现方式:饿汉模式&懒汉模式

三. 饿汉模式

饿汉模式,是在最开始就创建对象,即main函数开始前,对象就已经存在

要点有以下几个:

  1. 因为全局只能有一个对象,所以需要将构造函数私有化
  2. 内部封装static静态对象指针,然后类外初始化
  3. 提供静态成员函数,返回静态对象指针
  4. 使用互斥锁保证数据读取的线程安全
//饿汉模式
//在main函数调用前对象就存在
class Singleton
{
public://静态成员变量获取对象指针static Singleton*GetInstance(){return _ins;}//添加数据void Add(const char*str){_vmtx.lock();_v.push_back(str);_vmtx.unlock();}//打印数据void Print(){_vmtx.lock();for (auto& e : _v){cout << e << endl;}_vmtx.unlock();}private://构造函数私有化Singleton(){}
private:vector<string> _v;//存储数据mutex _vmtx;//互斥锁static Singleton*_ins;//静态指针
};//静态成员变量类外初始化
Singleton* Singleton::_ins = new Singleton();

饿汉模式的优点就是相对于懒汉模式,较为简单
缺点是,程序刚开始时就创建,如果对象较大,可能导致进程启动慢,且如果有多个单例类对象实例启动顺序不确定

如果这个单例对象在多线程并发环境下频繁使用,性能要求较高,那么显然使用饿汉模式来避免资源竞争,提高响应速度更好

四. 懒汉模式

懒汉模式是在第一次使用实例对象时,才创建对象

如果单例对象构造十分耗时或者占用很多资源,比如加载插件,初始化网络连接,读取文件等,为了不影响程序启动,可以使用懒汉模式(延迟加载

简易的懒汉模式

class Singleton
{
public://静态成员变量获取对象指针static Singleton*GetInstance(){static Singleton _ins;return &_ins;}//添加数据void Add(const char*str){_vmtx.lock();_v.push_back(str);_vmtx.unlock();}//打印数据void Print(){_vmtx.lock();for (auto& e : _v){cout << e << endl;}_vmtx.unlock();}private://构造函数私有化Singleton(){}
private:vector<string> _v;//存储数据mutex _vmtx;//互斥锁
};

stactic对象在C++11前无法保证线程安全,C++11后保证static对象初始化时线程安全的


复杂的懒汉模式

要点有如下几个:

  1. 懒汉模式的GetInstance需要有双检查加锁,同时因为是静态成员函数,所以还需要封装一个静态的互斥锁保护
  2. 可以使用DelInstance显示释放,但也可以通过回收机制在程序结束时回收资源。
    做法是内部定义一个类,该类的析构函数会显示调用DelInstance,然后再定义一个全局的回收机制对象,这样程序结束时会自动销毁回收机制对象,同时调用DelInstance
//懒汉模式
//第一次调用GetInstance才有对象
class Singleton
{
public://静态成员变量获取对象指针static Singleton*GetInstance(){//双检查加锁if (_ins == nullptr)//提高效率{_imtx.lock();//第一次调用为空才初始化if (_ins == nullptr)//线程安全{_ins = new Singleton();}_imtx.unlock();}return _ins;}//添加数据void Add(const char*str){_vmtx.lock();_v.push_back(str);_vmtx.unlock();}//打印数据void Print(){_vmtx.lock();for (auto& e : _v){cout << e << endl;}_vmtx.unlock();}//销毁static void DelInstance(){_imtx.lock();if (_ins){delete _ins;_ins = nullptr;}_imtx.unlock();}//回收机制class GC{public:~GC(){DelInstance();}};static GC _gc;//声明
private://构造函数私有化Singleton(){}
private:vector<string> _v;//存储数据mutex _vmtx;//保护vector的互斥锁static Singleton*_ins;//静态指针static mutex _imtx;//保护Singleton初始化的互斥锁
};//静态成员变量类外初始化为空
Singleton* Singleton::_ins = nullptr;
mutex Singleton::_imtx;//程序结束时,会调用其析构函数,内部再调用DelInstance()
Singleton::GC Singleton::_gc;//定义

结束语

感谢你的阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

http://www.yidumall.com/news/84130.html

相关文章:

  • 用xampp来搭建wordpress建站环境引擎搜索有哪些
  • 网站建设需要了解什么广告投放
  • 广州营销型网站建设公司哪家名气大网站排名英文
  • 北京网站建设 标准型 新翼网络营销方案3000字
  • 番禺电子商务网站建设网站建设一条龙
  • 社交网站开发用到的技术营销模式都有哪些
  • iis新建网站不能访问互联网广告平台排名
  • 在招聘网站里做电话销售网站是怎么做出来的
  • wordpress实现网站的登陆功能网店推广方式有哪些
  • 辽阳市建设行业培训中心网站自己手机怎么免费做网站
  • 有没有做京东客好的网站推荐优秀网页设计公司
  • 狮岭网站建设链接是什么意思
  • 白云做网站公司百度小说排行榜完本
  • 张家港 网站制作色目人
  • 重庆建设科技培训中心官方网站在线推广
  • 潍坊哪里做网站好如何做线上推广
  • 厦门做网站设计百度投诉热线中心客服
  • 网站建设需要钱吗友情链接交换的作用在于
  • 网站手机网页如何做短视频培训机构排名
  • 网站搭建appwindows优化软件哪个好
  • 汉阳放心的建站企丿百度网盘登录首页
  • 成都市住房和城乡建设管理委员会网站苏州seo免费咨询
  • 网站建设流程ppt苏州网络公司
  • 电商公司名字大全seo诊断站长
  • 南京网站推广公司学大教育培训机构怎么样
  • 龙采科技做网站多少钱广告代运营公司
  • 建站宝盒源代码长沙seo平台
  • 网站建站服务公司电话模板网站哪个好
  • 天城建设网站友链交换网站源码
  • 唯一做魅惑的网站赣州是哪个省