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

php 简单购物网站定兴县住房和城乡建设局网站

php 简单购物网站,定兴县住房和城乡建设局网站,提供seo服务,公司创建的法制网站文章目录 1、简介2、单例模式的种类2.1 饿汉式单例模式#xff1a;2.2 懒汉式单例模式#xff1a; 3、单例模式的具体介绍3.1、饿汉式3.1.1、代码示例3.1.2、组成部分3.1.3、优缺点3.1.4、应用场景 3.2、懒汉式3.2.1、代码示例3.2.2、组成部分3.2.3、优缺点3.2.4、应用场景 4… 文章目录 1、简介2、单例模式的种类2.1 饿汉式单例模式2.2 懒汉式单例模式 3、单例模式的具体介绍3.1、饿汉式3.1.1、代码示例3.1.2、组成部分3.1.3、优缺点3.1.4、应用场景 3.2、懒汉式3.2.1、代码示例3.2.2、组成部分3.2.3、优缺点3.2.4、应用场景 4、面试常问问题5、总结6、参考文章 1、简介 单例模式Singleton Pattern是一种创建型设计模式它确保一个类只有一个实例并提供一个全局访问点来获取该实例。这个模式涉及到一个单一的类该类负责创建自己的对象同时确保只有单个对象被创建。 以下是单例模式的一些关键点 1私有构造方法为了防止外部代码通过new关键字创建类的多个实例单例模式的构造方法是私有的。 2静态变量类的唯一实例通常存储在一个静态变量中这样它可以被类的所有实例共享和访问。 3公共静态方法为了提供对唯一实例的全局访问单例模式通常包含一个公共的静态方法该方法在需要时返回类的唯一实例。如果实例尚不存在该方法会创建它如果实例已经存在则直接返回该实例。 4线程安全在多线程环境中需要确保单例模式的实现是线程安全的以防止多个线程同时创建类的多个实例。这通常通过同步机制来实现。 2、单例模式的种类 2.1 饿汉式单例模式 1在类加载时就创建实例。 2线程安全因为实例在类加载时就已经存在不存在多线程竞争问题。 3可能导致内存浪费因为即使从未使用过该实例它仍然会被创建。 4实现简单通常通过静态变量和静态代码块来完成。 2.2 懒汉式单例模式 1在第一次使用时才创建实例。 2非线程安全因为多个线程可能同时进入创建实例的代码块导致创建多个实例除非添加额外的同步机制。 3节省内存资源因为实例只在需要时才创建。 4实现相对复杂需要处理线程安全问题通常通过同步方法或双重检查锁定来实现。 3、单例模式的具体介绍 3.1、饿汉式 3.1.1、代码示例 #include iostreamclass Singleton { public:// 禁用拷贝构造函数和赋值运算符确保单例的唯一性Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;// 提供一个公共的静态方法来获取单例对象static Singleton getInstance() {static Singleton instance; // 静态局部变量只在第一次调用时构造return instance;}// 一个示例方法用于展示单例对象的使用void doSomething() {std::cout Doing something in Singleton instance! std::endl;}private:// 私有构造函数防止外部直接创建实例Singleton() {std::cout Singleton instance created! std::endl;}// 禁用析构函数防止外部调用delete实际上在程序结束时会自动调用// 注意对于饿汉式单例析构函数通常不需要特别处理因为实例会在程序结束时自动销毁// 但为了完整性这里仍然声明为私有并添加注释~Singleton() default; };int main() {// 获取单例对象并调用其方法Singleton singleton Singleton::getInstance();singleton.doSomething();// 尝试获取同一个单例对象实际上仍然是同一个实例Singleton anotherSingleton Singleton::getInstance();anotherSingleton.doSomething();// 由于拷贝构造函数和赋值运算符被禁用以下代码会导致编译错误// Singleton copySingleton Singleton::getInstance(); // 错误拷贝构造函数被删除// Singleton assignSingleton;// assignSingleton Singleton::getInstance(); // 错误赋值运算符被删除return 0; }运行结果 Singleton instance created! Doing something in Singleton instance! Doing something in Singleton instance!3.1.2、组成部分 1私有静态成员变量 这是一个静态的类成员变量用于存储单例实例。由于它是私有的所以外部类不能直接访问或修改它。 2私有构造函数 类的构造函数被声明为私有以防止外部类通过new关键字创建新的实例。这是实现单例模式的关键之一。 3公共静态方法 提供一个公共的静态方法通常是getInstance用于返回单例实例。这个方法检查静态成员变量是否已经持有实例如果还没有则创建一个新的实例并返回如果已经存在则直接返回该实例。 4静态初始化块可选 在某些情况下单例实例的初始化可能需要执行一些复杂的逻辑这时可以使用静态初始化块来完成。然而在饿汉模式中由于实例在类加载时就已经被创建所以通常不需要静态初始化块。 3.1.3、优缺点 (1) 优点线程安全实现简单。 (2) 缺点可能导致内存浪费因为即使从未使用过该实例它仍然会被创建。 3.1.4、应用场景 1线程安全需求高由于饿汉模式在类加载时就创建了实例所以它是线程安全的无需额外的同步机制。这在多线程环境中尤其有用可以避免竞争条件和潜在的线程安全问题。 2实例创建开销小如果实例的创建开销很小或者实例的创建和初始化过程不会消耗太多资源那么饿汉模式是一个很好的选择。因为即使实例在类加载时被创建也不会对系统性能产生显著影响。 3实例需要提前准备在某些情况下实例需要在类加载时就准备好以便在后续的代码执行过程中随时使用。例如某些配置信息或资源需要在应用程序启动时就被加载和初始化。 3.2、懒汉式 3.2.1、代码示例 #include iostream #include mutex #include memoryclass Singleton { public:// 禁用拷贝构造函数和赋值运算符Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;// 获取单例实例的静态方法static Singleton* getInstance() {// 使用双重检查锁定Double-Checked Locking来确保线程安全和性能if (instance_ nullptr) {std::lock_guardstd::mutex lock(mutex_);if (instance_ nullptr) {instance_ new Singleton();}}return instance_;}// 示例方法void doSomething() {std::cout Singleton instance is doing something! std::endl;}// 析构函数用于清理资源~Singleton() {std::cout Singleton instance is being destroyed! std::endl;}private:// 私有构造函数防止外部创建实例Singleton() {std::cout Singleton instance is being created! std::endl;}// 静态成员变量保存单例实例static Singleton* instance_;// 静态互斥锁用于线程同步static std::mutex mutex_; };// 初始化静态成员变量 Singleton* Singleton::instance_ nullptr; std::mutex Singleton::mutex_;int main() {// 获取单例实例并调用示例方法Singleton* singleton1 Singleton::getInstance();singleton1-doSomething();// 再次获取单例实例应该是同一个实例Singleton* singleton2 Singleton::getInstance();singleton2-doSomething();// 注意main函数结束时单例实例的析构函数会被调用return 0; }3.2.2、组成部分 1私有的构造函数 懒汉式单例模式通过将构造函数私有化防止外部通过new关键字直接创建多个实例。这是实现单例模式的关键一步因为如果没有私有化构造函数外部代码就可以随意创建类的实例从而破坏单例模式的规则。 2 私有的静态实例变量 懒汉式单例模式使用一个私有的静态实例变量来存储唯一的实例。这个变量在类加载时不会被初始化而是在第一次调用获取实例的方法时才会被创建。由于该变量是静态的因此它只会在类的整个生命周期中存在一个实例。 3 公共的静态方法 懒汉式单例模式通过提供一个公共的静态方法来获取唯一的实例。这个方法首先会检查私有的静态实例变量是否为null如果是则创建一个新的实例并将其赋值给该变量。如果实例已经存在则直接返回该实例。 4线程安全机制可选 在多线程环境下懒汉式单例模式可能会出现多个线程同时创建实例的情况。为了解决这个问题可以在获取实例的方法中添加同步机制如使用synchronized关键字或java.util.concurrent包中的锁机制来确保只有一个线程能够创建实例。 3.2.3、优缺点 (1) 优点节省内存资源因为实例只在需要时才创建。 (2) 缺点非线程安全因为多个线程可能同时进入创建实例的代码块导致创建多个实例。需要额外的同步机制来保证线程安全。 3.2.4、应用场景 1延迟加载如果实例的创建开销较大或者实例的创建和初始化过程会消耗较多资源那么懒汉模式可以通过延迟加载来节省资源。只有在实际需要使用时才会创建和初始化实例。 2节省内存在某些情况下如果实例在类加载时并不需要使用那么懒汉模式可以避免不必要的内存占用。只有在需要时才会分配内存和创建实例。 3实例创建依赖条件如果实例的创建依赖于某些条件或参数并且这些条件或参数在类加载时并不确定那么懒汉模式可以根据实际情况来创建实例。这提供了更大的灵活性和适应性。 4、面试常问问题 对于C的单例模式面试高频问题主要集中在单例模式的基本概念、应用场景、实现方式及其相关细节上。以下是一些可能的面试问题及简要解答 一、单例模式的基本概念 1什么是C中的单例模式 单例模式是一种设计模式它确保一个类只有一个实例并提供一个全局访问点来访问该实例。在C中这通常通过私有化构造函数、拷贝构造函数和赋值运算符并提供一个静态的公共方法来获取实例来实现。 2单例模式的主要目的是什么 单例模式的主要目的是确保整个进程中只有一个类的实例并且提供一个统一的访问接口。这通常用于需要全局访问并共享资源的场景如日志记录器、配置管理器和数据库连接器等。 二、单例模式的应用场景 1请列举一些C中单例模式的应用场景 日志记录器确保整个应用程序中只有一个日志记录器实例以便集中管理日志输出。 配置管理器用于读取和管理应用程序的配置信息确保配置信息的一致性和全局可访问性。 数据库连接器在需要连接数据库时确保只有一个数据库连接器实例以减少资源消耗和提高性能。 三、单例模式的实现方式 1C中实现单例模式有哪些常见的方法 饿汉式在类加载时就初始化实例线程安全但可能会浪费空间。 懒汉式在第一次调用时才初始化实例实现了懒加载但需要注意线程安全问题。可以通过加锁或使用双重检查锁来确保线程安全。 静态内部类实现利用C11中的局部静态变量特性在第一次调用时初始化实例线程安全且效率高。 2什么是双重检查锁DCL它在C单例模式中的作用是什么 双重检查锁是一种优化技术用于在懒汉式单例模式中确保线程安全的同时提高效率。它首先检查实例是否已经存在如果不存在则加锁然后再次检查实例是否存在以避免在加锁期间其他线程已经创建了实例最后创建实例。这样可以减少不必要的加锁操作提高性能。 3为什么C11中的局部静态变量可以用于实现线程安全的单例模式 C11标准保证了局部静态变量的初始化是线程安全的。因此在静态方法中利用局部静态变量来初始化单例实例可以确保在多线程环境中只有一个线程能够创建实例而其他线程将直接获取到已经创建的实例。 四、单例模式的进阶问题 1如何防止C中的单例模式被反射攻击 在C中由于不存在像Java那样的反射机制因此通常不需要特别考虑防止反射攻击的问题。但是如果使用了某些支持反射的库或框架则需要通过适当的措施来防止反射攻击如私有化构造函数和析构函数等。 2如何确保C中的单例模式在序列化和反序列化过程中保持唯一性 在C中如果单例类需要被序列化则需要实现自定义的序列化逻辑。在反序列化过程中可以检查是否已经存在实例如果存在则直接返回该实例而不是创建新实例。这通常需要在序列化时保存一些额外的信息来标识实例的唯一性。 3C中的单例模式是否可以被删除或重置 在大多数情况下单例模式不需要被删除或重置。因为单例实例通常在整个应用程序的生命周期内都存在并且被多个模块或组件共享。然而在某些特殊情况下如单元测试或应用程序重置等可能需要提供一种机制来删除或重置单例实例。这可以通过在单例类中添加一个专用的销毁函数来实现但需要注意线程安全和资源释放等问题。 5、总结 单例模式是一种简单而有效的设计模式但在使用时需要注意其优缺点和注意事项以确保其正确性和高效性。 6、参考文章 本文章由文心一言搜索的来的。
http://www.sczhlp.com/news/180276/

相关文章:

  • 怎样看一个网站是不是织梦做的做网站需要公司资料吗
  • 网上购物商城网址搜索引擎排名优化方案
  • 郑州网站建设更好个人站点的制作
  • 登别的网站应怎么做建立一个网站需要多久
  • 网站开发有哪几种语言郑州seo竞价
  • 阿里巴巴国际站怎么做网站模版食品工厂设计平面图
  • STM32 教程
  • LibreChat-图文并茂手把手教你搭建自己的AI机器人 Step-by-step guide to building your own chatbot
  • NOISG 2025 Prelim
  • PluginMonitor - Typecho 插件监控工具
  • 科技类网站设计wordpress吐槽源码
  • 淄博铭锐 网站建设哪些网站可以做签约设计师
  • 网站建设需要几十万网页设计就业
  • 滁州做网站hi444小程序开发平台哪家质量好
  • 网站卡密怎么做比分网站怎么做
  • 虞城网站建设营销型网站定做
  • 网站备案时间查询动态型网站建设
  • 网站 科技感免费注册个人网站
  • 做网站属于无形资产还是费用查看wordpress版本号
  • 学科网站建设网站建设大作业选题
  • 养殖p2p网站建设东莞常平中学录取分数线2022
  • 电子商务网站建设不足简述网站开发的工作流程
  • 俄语网站建设易语言网站批量注册怎么做
  • 花店营销策略超市门户网站建设google帐户登录网站如何做的
  • 网站营销网wordpress首行空两格
  • 有没有做产品团购的网站网页制作与发布的流程
  • 四川省建设工程质量与安全监督网站asp.net网站开发教程 pdf
  • 广州骏域网站代做毕业设计找哪个网站
  • 长春网站制作最专业电子制作diy
  • 做网站公司职员工资做网站凡科如何