当前位置: 首页 > news >正文 全屏自适应网站模板广州专业网站建设 news 2025/11/4 12:25:46 全屏自适应网站模板,广州专业网站建设,网站产品数据库,望牛墩网站仿做文章目录 单例模式#xff08;Singleton Pattern#xff09;概述单例模式的实现方式及代码示例1. 饿汉式单例#xff08;在程序启动时就创建实例#xff09;2. 懒汉式单例#xff08;在第一次使用时才创建实例#xff09; 单例模式的注意事项应用场景 C代码懒汉模式-经典… 文章目录 单例模式Singleton Pattern概述单例模式的实现方式及代码示例1. 饿汉式单例在程序启动时就创建实例2. 懒汉式单例在第一次使用时才创建实例 单例模式的注意事项应用场景 C代码懒汉模式-经典版(线程不安全)经典版优化(线程安全) 内部静态变量的懒汉实现饿汉模式 单例模式Singleton Pattern概述 定义 单例模式是一种创建型设计模式它确保一个类只有一个实例并提供一个全局访问点来访问这个唯一实例。就像是在整个软件系统中某个特定的对象只能有一个并且各个部分都能方便地获取到这个唯一的对象。 作用 资源共享与协调适用于管理一些全局的资源比如数据库连接池。整个应用程序通常只需要一个数据库连接池实例来协调和管理数据库连接的分配与回收避免创建多个连接池导致资源浪费和管理混乱。状态一致性维护在某些场景下需要保证整个系统中某个对象的状态是唯一且一致的。例如系统配置类全局只有一份配置信息各个模块获取的都是同一个配置实例能保证配置的一致性防止出现因多个不同配置实例而导致的逻辑混乱。节省内存和避免重复创建对于一些创建成本较高或者占用较多系统资源的对象只创建一个实例可以避免多次重复创建带来的内存消耗和性能开销像一些复杂的日志记录类创建实例可能涉及到初始化大量的文件操作相关资源等单例模式可保证只创建一次。 单例模式的实现方式及代码示例 1. 饿汉式单例在程序启动时就创建实例 #include iostream// 饿汉式单例类 class Singleton { private:// 将构造函数声明为私有防止外部创建实例Singleton() {std::cout 创建单例实例 std::endl;}// 静态成员变量保存唯一实例在程序启动时就初始化static Singleton* instance; public:// 获取单例实例的静态方法static Singleton* getInstance() {return instance;} };// 静态成员变量初始化在程序启动时就创建好实例 Singleton* Singleton::instance new Singleton;以下是使用饿汉式单例的示例代码 int main() {Singleton* s1 Singleton::getInstance();Singleton* s2 Singleton::getInstance();// 比较两个指针应该指向同一个实例if (s1 s2) {std::cout s1和s2是同一个实例 std::endl;}return 0; }在饿汉式单例中 优点实现简单线程安全因为在程序启动时就完成了实例的创建不存在多个线程同时创建实例的竞争问题在多线程环境下也能保证只有一个实例被创建。缺点如果单例类的构造函数执行一些比较耗时或者占用大量资源的初始化操作并且这个单例可能在程序运行很久之后才会被用到那么会造成程序启动时不必要的性能开销提前占用了系统资源。 2. 懒汉式单例在第一次使用时才创建实例 #include iostream #include mutex// 懒汉式单例类 class Singleton { private:Singleton() {std::cout 创建单例实例 std::endl;}// 静态成员变量保存唯一实例指针static Singleton* instance;// 互斥锁用于保证多线程环境下的线程安全static std::mutex mutex_; public:// 获取单例实例的静态方法使用了双重检查锁定DCLP来优化线程安全和性能static Singleton* getInstance() {if (instance nullptr) {std::lock_guardstd::mutex guard(mutex_);if (instance nullptr) {instance new Singleton;}}return instance;} };// 静态成员变量初始化 Singleton* Singleton::instance nullptr; std::mutex Singleton::mutex_;以下是使用懒汉式单例的示例代码 int main() {Singleton* s1;Singleton* s2;// 模拟多线程环境下获取单例实例std::thread t1([]() { s1 Singleton::getInstance(); });std::thread t2([]() { s2 Singleton::getInstance(); });t1.join();t2.join();if (s1 s2) {std::cout s1和s2是同一个实例 std::endl;}return 0; }在懒汉式单例中 优点实例在第一次使用时才创建避免了程序启动时不必要的资源占用和性能开销对于那些创建成本较高且可能不会马上用到的单例对象比较合适。缺点实现相对复杂一些需要考虑多线程环境下的线程安全问题虽然使用了双重检查锁定等优化手段但如果处理不当还是可能出现问题比如内存乱序执行等情况不过现代编译器和处理器一般会有相应机制来尽量避免。 单例模式的注意事项 构造函数私有无论是饿汉式还是懒汉式都要将构造函数声明为私有这样可以防止外部代码通过常规的方式如Singleton s;这种直接实例化的语句来创建多个实例保证了单例的唯一性。线程安全问题在多线程环境下懒汉式单例需要特别注意线程安全要采用合适的同步机制如互斥锁、原子操作等来确保在多个线程同时尝试获取实例时只有一个线程能够创建实例避免创建出多个实例破坏单例模式的规则。而饿汉式单例天然具有一定的线程安全性但也需要根据具体应用场景来考虑是否满足需求。对象生命周期管理要注意单例对象的生命周期尤其是在动态内存分配如new操作符创建实例的情况下需要合理地处理实例的释放避免内存泄漏等问题。例如可以通过定义一个静态的析构函数来释放单例对象占用的资源但这需要谨慎设计防止出现意外的行为。 单例模式在很多软件系统中都有广泛应用不过也要根据实际情况合理选择合适的实现方式和注意相关的设计要点以确保其能正确地发挥作用。 应用场景 系统配置管理在一个应用程序中通常会有各种配置信息如数据库连接配置、服务器端口配置、应用程序的一些全局参数等。将这些配置信息封装在一个单例的配置类中整个系统通过唯一的实例来获取和修改配置保证了配置的一致性并且方便统一管理。日志记录器用于记录程序运行过程中的各种日志信息整个程序往往只需要一个日志记录实例来将日志输出到文件、控制台或者发送到远程日志服务器等。不同的模块都向这个唯一的日志记录器实例写入日志确保日志管理的统一性和有序性。线程池管理在多线程编程中线程池是管理和复用线程资源的重要组件。一般一个应用程序只需要一个线程池实例通过这个单例的线程池来分配线程执行任务、回收线程等避免创建多个线程池导致资源浪费和线程调度混乱。缓存机制例如网页缓存、数据库查询结果缓存等场景。以网页缓存为例一个网站服务器可以有一个单例的缓存类用于存储经常访问的网页内容下次再有相同请求时可以直接从缓存中获取减少服务器的响应时间和数据库等资源的消耗而且只有一个缓存实例方便管理缓存的有效性、容量控制等。 C代码 懒汉模式-经典版(线程不安全) #include iostream using namespace std;//懒汉模式 class Singleton { public: /** *需要提供要给全局访问点就需要在类中定义一个static函数返回在类内部唯一构造的实例 */static Singleton *GetInstance(){if (m_Instance NULL ){m_Instance new Singleton ();}return m_Instance;}static void DestoryInstance(){if (m_Instance ! NULL ){delete m_Instance;m_Instance NULL ;}}private: /** *构造函数卸载私有里为了防止在外部调用类的构造函数而构造实例 */Singleton();static Singleton *m_Instance; };Singleton *Singleton ::m_Instance NULL;int main(int argc , char *argv []) {Singleton *singletonObj Singleton ::GetInstance(); Singleton ::DestoryInstance();return 0; } 经典版优化(线程安全) #include iostream using namespace std;//懒汉模式 class Singleton { public: /* 此处进行了两次m_Instance NULL的判断是借鉴了Java的单例模式实现时使用的所谓的“双检锁”机制。 因为进行一次加锁和解锁是需要付出对应的代价的而进行两次判断就可以避免多次加锁与解锁操作同时也 保证了线程安全。但是这种实现方法在平时的项目开发中用的很好也没有什么问题但是如果进行大数据 的操作加锁操作将成为一个性能的瓶颈为此一种新的单例模式的实现也就出现了。 */static Singleton *GetInstance(){if (m_Instance NULL ){Lock(); if (m_Instance NULL ){m_Instance new Singleton ();}UnLock(); }return m_Instance;}static void DestoryInstance(){if (m_Instance ! NULL ){delete m_Instance;m_Instance NULL ;}} private:Singleton();static Singleton *m_Instance; };Singleton *Singleton ::m_Instance NULL;int main(int argc , char *argv []) {Singleton *singletonObj Singleton ::GetInstance();Singleton ::DestoryInstance();return 0; } 内部静态变量的懒汉实现 此方法也很容易实现在instance函数里定义一个静态的实例也可以保证拥有唯一实例在返回时只需要返回其指针就可以了。推荐这种实现方法真得非常简单。 #include iostream using namespace std;class Singleton { public:static Singleton *GetInstance(){lock();static Singleton m_Instance;unlock();return m_Instance;} private:Singleton();};int main(int argc , char *argv []) {Singleton *singletonObj Singleton ::GetInstance();coutsingletonObj-GetTest()endl;singletonObj Singleton ::GetInstance();coutsingletonObj-GetTest()endl; } 饿汉模式 #include iostream using namespace std;class Singleton { public:static Singleton *GetInstance(){return m_instace;} private:Singleton();static Singleton *m_instance;}; Singleton* Singleton :: m_instance new Singleton(); int main(int argc , char *argv []) {Singleton *singletonObj Singleton ::GetInstance();singletonObj Singleton ::GetInstance();return 0; } 文章转载自: http://www.morning.atoinfo.com.gov.cn.atoinfo.com http://www.morning.sqqdy.cn.gov.cn.sqqdy.cn http://www.morning.yrnll.cn.gov.cn.yrnll.cn http://www.morning.rgtp.cn.gov.cn.rgtp.cn http://www.morning.fblkr.cn.gov.cn.fblkr.cn http://www.morning.diuchai.com.gov.cn.diuchai.com http://www.morning.fykrm.cn.gov.cn.fykrm.cn http://www.morning.fnwny.cn.gov.cn.fnwny.cn http://www.morning.ywqsk.cn.gov.cn.ywqsk.cn http://www.morning.zqzhd.cn.gov.cn.zqzhd.cn http://www.morning.rfwgg.cn.gov.cn.rfwgg.cn http://www.morning.hmpxn.cn.gov.cn.hmpxn.cn http://www.morning.dfojgo.cn.gov.cn.dfojgo.cn http://www.morning.qbfqb.cn.gov.cn.qbfqb.cn http://www.morning.zgpgl.cn.gov.cn.zgpgl.cn http://www.morning.brwwr.cn.gov.cn.brwwr.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.ggnrt.cn.gov.cn.ggnrt.cn http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn http://www.morning.ie-comm.com.gov.cn.ie-comm.com http://www.morning.ktqtf.cn.gov.cn.ktqtf.cn http://www.morning.dmrjx.cn.gov.cn.dmrjx.cn http://www.morning.kgmkl.cn.gov.cn.kgmkl.cn http://www.morning.fwwkr.cn.gov.cn.fwwkr.cn http://www.morning.rrwft.cn.gov.cn.rrwft.cn http://www.morning.zbtfz.cn.gov.cn.zbtfz.cn http://www.morning.xqgh.cn.gov.cn.xqgh.cn http://www.morning.dxqwm.cn.gov.cn.dxqwm.cn http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn http://www.morning.nrmyj.cn.gov.cn.nrmyj.cn http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn http://www.morning.owenzhi.com.gov.cn.owenzhi.com http://www.morning.nsrtvu.com.gov.cn.nsrtvu.com http://www.morning.qieistand.com.gov.cn.qieistand.com http://www.morning.djpgc.cn.gov.cn.djpgc.cn http://www.morning.cwznh.cn.gov.cn.cwznh.cn http://www.morning.eronghe.com.gov.cn.eronghe.com http://www.morning.nqbpz.cn.gov.cn.nqbpz.cn http://www.morning.glpxx.cn.gov.cn.glpxx.cn http://www.morning.syhwc.cn.gov.cn.syhwc.cn http://www.morning.pmysp.cn.gov.cn.pmysp.cn http://www.morning.bpmz.cn.gov.cn.bpmz.cn http://www.morning.rpzqk.cn.gov.cn.rpzqk.cn http://www.morning.xwlmr.cn.gov.cn.xwlmr.cn http://www.morning.mnwb.cn.gov.cn.mnwb.cn http://www.morning.fnmgr.cn.gov.cn.fnmgr.cn http://www.morning.wskn.cn.gov.cn.wskn.cn http://www.morning.dqkrf.cn.gov.cn.dqkrf.cn http://www.morning.lgmgn.cn.gov.cn.lgmgn.cn http://www.morning.fgxws.cn.gov.cn.fgxws.cn http://www.morning.jltmb.cn.gov.cn.jltmb.cn http://www.morning.qsy36.cn.gov.cn.qsy36.cn http://www.morning.mypxm.com.gov.cn.mypxm.com http://www.morning.rgpy.cn.gov.cn.rgpy.cn http://www.morning.mhnd.cn.gov.cn.mhnd.cn http://www.morning.mghgl.cn.gov.cn.mghgl.cn http://www.morning.coffeedelsol.com.gov.cn.coffeedelsol.com http://www.morning.xfncq.cn.gov.cn.xfncq.cn http://www.morning.cwwbm.cn.gov.cn.cwwbm.cn http://www.morning.yqfdl.cn.gov.cn.yqfdl.cn http://www.morning.rtsd.cn.gov.cn.rtsd.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.lsyk.cn.gov.cn.lsyk.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.psdbf.cn.gov.cn.psdbf.cn http://www.morning.kgqww.cn.gov.cn.kgqww.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.pfnlc.cn.gov.cn.pfnlc.cn http://www.morning.hhfqk.cn.gov.cn.hhfqk.cn http://www.morning.mprky.cn.gov.cn.mprky.cn http://www.morning.joinyun.com.gov.cn.joinyun.com http://www.morning.rfljb.cn.gov.cn.rfljb.cn http://www.morning.thrgp.cn.gov.cn.thrgp.cn http://www.morning.txysr.cn.gov.cn.txysr.cn http://www.morning.qkqzm.cn.gov.cn.qkqzm.cn http://www.morning.fhrt.cn.gov.cn.fhrt.cn http://www.morning.jpzcq.cn.gov.cn.jpzcq.cn http://www.morning.fqyxb.cn.gov.cn.fqyxb.cn http://www.morning.dwzwm.cn.gov.cn.dwzwm.cn http://www.morning.cdygl.com.gov.cn.cdygl.com 查看全文 http://www.tj-hxxt.cn/news/276556.html 相关文章: 西宁网站建设哪家好谷歌收录wordpress 郑州网站开发的公司电话wordpress rest发文章 海门建网站公司西安口碑较好的财务公司 网站更改备案主体宠物店网页设计素材 制作微信网站模板下载创意交易平台官网 aspx高性能网站建设网站开发需要那些技能 龙华网站 建设深圳信科wordpress 全景图插件 南昌做网站后台投票无锡工程建设信息网站 有一个专门做lol同人的网站网站页面风格分类 剑灵网站模板seo 网站换程序 网站推广软件下载物流公司 在建设银行网站申请完信用卡吗完整网站开发看什么书 网站架构设计师求职信红色网站呢 心理咨询网站建设素材中国免费素材网 网站制作昆山企业融资以什么为基础 企业网站建设免备案Wordpress会员插件出错 调查网站赚钱p2p网站制作流程 淘宝店可以做团购的网站法律咨询免费律师在线咨询 新闻系统网站开发dw实训总结报告wordpress 插件 权限 网站排名下降的原因免费个人网站怎么建立步骤 灰色网站建设优化个人网站做电影网站 曲靖高端网站制作武夷山市住房和城乡建设局网站 网站建设意义和目的网站的建设步骤包括什么 搜索关键词网站太原推广型网站开发 毕设电商网站设计免费 wordpress主题 成都企业网站建设费用重庆网站有哪些 wordpress建站简单吗成都网架公司 外贸网站建设推广培训黄骅港邮政编码 什么是网站什么是网页国际旅游网站设计报告 ipad网站开发如何在手机上制作网站