设计模式学习--单例模式

原创 2015年07月07日 00:04:12

单例模式,顾名思义就是在整个软件架构中或者说在整个应用中只存在该对象的一个实例。举个例子,比如在开源游戏引擎cocos里面有一个叫做Director的导演类,因为在整个游戏中只存在一个导演类,故该类就可以采用单例模式来实现。
先看一下单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常情况下我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个最好的解决方案是,让类自身负责保存它的唯一实例,这个类可以保证没有其他的实例可以被创建,并且可以提供一个访问该实例的方法。
在看一下单例模式的结构图:
单例模式结构图
适用性
1 当类只能有一个实例而且客户可以从一个大家都知道的访问点访问时
2 当这个唯一实例应该是通过子类化可以扩展时,并且客户应该无需更改代码就能用一个扩展的实例时
协作
客户只能通过Singleton的GetInstance操作获得一个Singleton的实例
优点
1 对唯一实例的受控访问
2 缩小名空间
3 允许对操作和表示的精化
4 允许可变数目的实例
5 比类操作更加灵活
实现
注意构造函数必须是保护性,任何外部想直接实例化该类的对象都会得到一个编译时错误。GetInstance使用惰性初始化,即静态成员初始化为0,如果该值为0则实例化一个对象,否则直接返回该变量。
例子

/************************************************************************
       @fileName:Emperor.h 
       @function: 单例模式的负责产生唯一实例
       @author: jaime
       @ver: 1.0.0
************************************************************************/
#pragma once
class Emperor
{
private:
    Emperor()
    {

    }
public:
    ~Emperor();
    static Emperor* getInstance();
    static void say();
private:
    static Emperor* instance;
};

#include "Emperor.h"
#include <iostream>

using namespace std;

Emperor* Emperor::instance = nullptr;

Emperor::~Emperor()
{
}

Emperor* Emperor::getInstance()
{
    if (instance == nullptr)
    {
        instance = new Emperor();
    }
    return instance;
}

void Emperor::say()
{
    cout << "我就是皇帝" << endl;
}


#include "stdafx.h"
#include "Emperor.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int i = 0;
    for (i; i < 3; i++)
    {
        Emperor* emper = Emperor::getInstance();
        emper->say();
    }
    return 0;
}

设计模式学习之单例模式

  • 2013年12月11日 21:43
  • 5KB
  • 下载

23钟设计模式之单例模式

  • 2013年08月13日 10:41
  • 26KB
  • 下载

【设计模式学习笔记】单例模式

单例模式:C#定义:单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。[DP]“通常我们可以使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的方法就是,让类自身负责保存它的唯一...

设计模式之单例模式程序

  • 2010年05月18日 10:28
  • 3KB
  • 下载

java设计模式之单例模式详解

  • 2012年11月02日 17:53
  • 33KB
  • 下载

跟着实例学习设计模式(1)-单例模式(创建型)

单例模式属于创建型设计模式。   设计意图:保证一个类只有一个实例,并提供一个访问它的全局访问点。   单例模式根据单例,一种是懒汉式单例。饿汉式单例在单例类被加载时候,就实例化一个对象交给自己的引用...
  • andy_gx
  • andy_gx
  • 2015年07月06日 00:35
  • 790

设计模式单例模式

  • 2014年10月10日 20:56
  • 4KB
  • 下载

设计模式——单例模式(学习笔记)

最近在学习设计模式,并决定把学习的东西写成笔记,也算是心得了吧。 ——前言 定义:单例模式就是当你希望在你的工程中有个只会实例化一次的类(或者说只有一个对象)时,需要使用的设计模式。既然使用这...

设计模式之单例模式

  • 2012年04月10日 17:38
  • 728B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式学习--单例模式
举报原因:
原因补充:

(最多只允许输入30个字)