加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

设计模式(五)——单例模式

发布时间:2020-12-14 02:33:30 所属栏目:Windows 来源:网络整理
导读:定义: 保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。 单例模式:如Windows的任务管理器 三个要点 : ? 一是某个类只能有一个实例; ? 二是它必须自行创建这个实例; ?三是它必须自行向整个系统提供这个实例 Singleton(单例)

定义:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。

单例模式:如Windows的任务管理器

三个要点
?  一是某个类只能有一个实例;
?  二是它必须自行创建这个实例;
  ?三是它必须自行向整个系统提供这个实例

Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,
?????        让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;
?????        在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例

单例模式的使用步骤:
  a)? 构造函数私有化。
  b)? 提供一个全局的静态方法(全局访问点)来获取单例对象。
  c)? 在类中定义一个静态指针,指向本类的变量的静态变量指针 。

优点:
(1) 单例模式提供了对唯一实例的受控访问。
(2) 节约系统资源。 由于在系统内存中只存在一个对象。
缺点:
(1) 扩展略难。 单例模式中没有抽象层。
(2) 单例类的职责过重。

?

适用场景
(1) 系统只需要一个实例对象,如系统要求提供一个唯一的序列号生成器
或资源管理器,或者需要考虑资源消耗太大而只允许创建一个对象。
(2) 客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问
点,不能通过其他途径访问该实例。

?

#include <iostream>
using namespace std;

class Singleton
{
public:
    // 全局变量方法
    static Singleton * get_insatnce()
    {
        return instance;
    }
private:
    // 不让类的外部再创建实例 声明为private
    Singleton()
    {

    }
    static Singleton* instance;// 指向本例的唯一实例指针
};

// 饿汉式——在编译期间就已经确认了这个唯一的实例
Singleton* Singleton::instance = new Singleton; // 属于类的内部

class Singleton2
{
public:
    static Singleton2* get_instance()
    {
        if (instance == NULL) {
            instance = new Singleton2;
        }
        return instance;
    }
private:
    Singleton2() {

    }
    static Singleton2* instance;
};

// 懒汉式 遇到多线程的时候要注意加锁机制
Singleton2* Singleton2::instance = NULL;

int main()
{
    Singleton* s1 = Singleton::get_insatnce();

    system("pause");
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读