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

对购物网站建设的建议商圈数据app

对购物网站建设的建议,商圈数据app,营销策划方案1500字,海外推广代理商前言#xff1a; 博主将从此篇单例模式开始逐一分享23种经典设计模式#xff0c;并结合C为大家展示实际应用。内容将持续更新#xff0c;希望大家持续关注与支持。 什么是单例模式#xff1f; 单例模式是设计模式的一种#xff08;属于创建型模式 (Creational Pa…前言         博主将从此篇单例模式开始逐一分享23种经典设计模式并结合C为大家展示实际应用。内容将持续更新希望大家持续关注与支持。 什么是单例模式 单例模式是设计模式的一种属于创建型模式 (Creational Patterns) )它确保某个类只有一个实例并为该实例提供一个全局访问点。它常用于那些在整个系统中只需要一个实例的类例如配置管理、日志记录、线程池、缓存等。 为什么选择单例模式 1. 确保唯一性 有些时候我们需要确保某个对象在整个系统中只存在一个。这样可以避免因为多次实例化导致的资源浪费或不一致性。 2. 节省资源 如果一个对象初始化需要大量资源例如读取配置文件或建立数据库连接那么多次实例化就可能导致不必要的开销。 3. 提供全局访问点 这让其他对象可以轻松地访问到该实例并与之交互。 4. 单例模式的不足 万事万物都没有绝对的好不然也不会有23种设计模式过度依赖单例模式可能使代码变得紧耦合和难以测试。因此当考虑使用单例模式时应当仔细权衡其优点和潜在的问题。         单例模式的分类 单例模式的具体实现  1. 饿汉式 特点在类加载时就完成了初始化静态成员对象的创建是在类加载时完成的。优点线程安全基于类加载机制避免了多线程同步问题。缺点不是懒加载可能造成资源浪费。 class Singleton { private:// Singleton的私有静态实例static Singleton instance;// 私有构造函数确保只能通过getInstance方法来访问Singleton实例Singleton() {}public:// 公共静态方法用于获取Singleton实例static Singleton getInstance() {return instance;} };// 初始化静态的Singleton实例 Singleton Singleton::instance;2. 懒汉式 特点在第一次调用时实例化。优点懒加载只有在真正需要对象时才会创建。缺点需要处理线程安全问题。 class Singleton { private:// Singleton的私有静态指针实例static Singleton* instance;// 私有构造函数确保只能通过getInstance方法来访问Singleton实例Singleton() {}public:// 公共静态方法用于获取Singleton实例。如果实例不存在就创建一个。static Singleton* getInstance() {if (!instance) { // 判断instance是否为空instance new Singleton(); // 如果为空则新建一个Singleton对象}return instance; // 返回Singleton对象的指针} };// 初始化静态的Singleton指针实例为nullptr Singleton* Singleton::instance nullptr;3. 懒汉式带锁 特点在首次请求对象时创建实例但加入了互斥锁以确保线程安全。优势懒加载线程安全。劣势每次访问时都需要加锁可能会有性能开销。 class Singleton { private:static Singleton* instance;static std::mutex mtx; // 用于同步的互斥锁Singleton() {}public:static Singleton* getInstance() {std::lock_guardstd::mutex lock(mtx); // 直接锁定if (!instance) {instance new Singleton();}return instance;} };Singleton* Singleton::instance nullptr; std::mutex Singleton::mtx;4. 双重检查锁定DCL, Double Checked Locking 特点结合了懒汉式和synchronized同步锁。优点懒加载线程安全且性能较高。 class Singleton { private:// Singleton的私有静态指针实例static Singleton* instance;// 用于同步的互斥锁static std::mutex mtx;Singleton() {}public:// 这里使用了双重检查锁定来确保线程安全static Singleton* getInstance() {if (!instance) { // 第一次检查不加锁std::lock_guardstd::mutex lock(mtx); // 加锁if (!instance) { // 第二次检查已加锁instance new Singleton(); }}return instance; } };Singleton* Singleton::instance nullptr; std::mutex Singleton::mtx;5. 静态局部变量C11) 利用C11特性局部静态变量已经是线程安全的并且无需额外的锁或同步机制。 class Singleton { public:// 公共静态方法用于获取Singleton实例的引用。// 这里利用了局部静态变量的特性该变量只会初始化一次并且这个初始化过程在C11及以上是线程安全的。static Singleton getInstance() {static Singleton instance; // 局部静态变量return instance; // 返回这个局部静态变量的引用}private:// 私有构造函数确保只能通过getInstance方法来访问Singleton实例Singleton() {} };6. 使用std::once_flag和std::call_onceC11及以上: 特点确保某个代码块只被执行一次。优势线程安全性能较好。劣势依赖于C11及以上版本的特性。 class Singleton { private:// Singleton的私有静态指针实例static Singleton* instance;static std::once_flag onceFlag;// 私有构造函数Singleton() {}public:// 删除拷贝构造函数和赋值操作符确保不能拷贝Singleton(const Singleton other) delete;Singleton operator(const Singleton other) delete;// 公共静态方法用于获取或创建Singleton实例static Singleton* getInstance() {std::call_once(onceFlag, []() {instance new Singleton();});return instance;} };// 初始化静态成员 Singleton* Singleton::instance nullptr; std::once_flag Singleton::onceFlag;开发中的选择 在实际开发中选择单例模式的具体实现通常取决于以下因素 线程安全性需求在多线程应用中单例模式的实现必须是线程安全的。但如果你知道应用永远不会在多线程环境中运行你可以选择一个不考虑线程安全的简单实现。 性能考虑某些单例实现例如每次访问时都加锁的懒汉式可能会对性能产生负面影响。但在现代硬件上这种影响通常可以忽略不计除非你的代码在高频、高并发场景下运行。 C版本在C11及更高版本中局部静态变量的初始化是线程安全的这使得某些单例实现变得更为简洁和可靠。 基于上述因素以下是在实际开发中经常使用的单例模式实现 局部静态变量推荐尤其是C11及以上 这种方法简洁、线程安全并且无需额外的锁或同步机制。 双重检查锁定DCL, Double Checked Locking 这在C11之前可能是线程安全的选择但需要谨慎使用因为在某些老的编译器和硬件上可能会出现问题。 使用std::call_once和std::once_flag 这是C11及以上版本提供的线程安全方法可以确保对象只初始化一次。 饿汉式 在程序启动时就创建实例。这种方法简单并且线程安全但可能会导致不必要的资源浪费特别是当单例对象很大或初始化成本很高时。 懒汉式带锁 在首次请求时创建实例并使用互斥锁确保线程安全。这种方式在性能敏感的场景中可能不是最佳选择。 结论 单例模式有许多不同的实现每种实现都有其适用的场景和优缺点。在实践中选择哪种实现需要根据具体需求和上下文进行权衡。 本文侧重于介绍单例模式在C中的使用方法若读者有不同的的理解和看法欢迎在评论区留言
http://www.hkea.cn/news/14276732/

相关文章:

  • 中山移动网站建设报价北京网络维护公司
  • 网站建设展板vi设计说明
  • 计算机机应用网站建设与维护泉州做网站优化多少钱
  • 廊坊网站建设廊坊网络公司驻梦网站维护要求
  • 为网站生成rss江北区城乡建设部网站首页
  • 百度网站怎么用wordpress中的搜索
  • 舟山高端网站设计滕州网站制作哪家好
  • 做网站撘框架西部数码 成品网站
  • 深圳公司网站改版通知wordpress 数据喵
  • 网站建设服务商推荐seo排名点击器原理
  • 上海网站se0优化做导航网站有发展吗
  • 昆明建设公司网站hefei 网站制作
  • 武清做网站的公司wordpress没法登陆
  • 陕西省建设银行分行互联网互联网站洛阳免费网站建设
  • 自己编程怎么做网站教程网站推广平台怎么做
  • 商城系统平台有哪些极限优化wordpress
  • 做效果图挣钱的网站深圳高端网站设计公司
  • 可以注册免费网站小公司做网站赚钱
  • 网站 手机版 电脑版 怎么做的江门移动网站建设报价
  • 网站建设技术分类net网站开发JD
  • 设计运动品牌网站常州最新消息今天
  • 南宁企业自助建站简述电子商务网站的建设
  • 苏州城乡住房建设厅网站做logo好的网站
  • 做评选活动的网站电影采集网站怎么做
  • 如何刷网站排名淄博建设局网站
  • 如何做自己的网站赚钱wordpress 幻灯片设置
  • 网站的域名是什么意思seo经验是什么
  • 用ps切片做网站能不能完成简述跨境电商网站的平台建设
  • 中国建设银行网站 个人客户硬件开发公司
  • ip地址直接访问网站网站权重怎么提升