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

原创 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;
}

Java学习笔记---设计模式之单例模式

一、引言         单例模式是设计模式中最常用的一种,也是工作面试中会被经常问到的一种,因此,这篇文章将主要讲述如何实现单例模式,以及单例模式的一些优缺点。 二、单例模式的定义      ...
  • wenwen091100304
  • wenwen091100304
  • 2015年11月07日 13:51
  • 641

Java中的设计模式学习总结(二)---单例模式

java的二十三种设计模式之单例模式。
  • wu631464569
  • wu631464569
  • 2016年09月25日 18:39
  • 220

设计模式系列(一)单例模式

一、简单介绍 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。 《设计模式》书中对单例模式动机的介绍 对于系统中的某些类...
  • robertcpp
  • robertcpp
  • 2016年06月05日 11:00
  • 2227

设计模式(创建型)之单例模式(Singleton Pattern)

单例模式可能是23种设计模式中最简单的。应用也非常广泛,譬如Android中的数据库访问等操作都可以运用单例模式。核心概念: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称...
  • yanbober
  • yanbober
  • 2015年04月27日 16:50
  • 2662

C++设计模式[二]单例模式

接着就是单例模式;个人理解就是把创建方法改为私有,然后再内部实例化,禁止外部创建对象。 何为单例模式,在GOF的《设计模式:可复用面向对象软件的基础》中是这样说的:保证一个类只有一个实例,并提供一个...
  • langb2014
  • langb2014
  • 2015年11月03日 16:11
  • 1074

设计模式:单例模式(Singleton)

单例模式在23个设计模式中算得上是最简单的一个了,也行你会有异议,那就换成“最简单之一”,这样就严谨了很多。   单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。   适用性:当类...
  • u013256816
  • u013256816
  • 2016年03月23日 21:37
  • 4922

使用Object-C实现23种设计模式之单例模式

今天给大家讲解一下第四种创建模式——单例模式,单例模式不同于前几种,前几种更注重逻辑,而单例模式则偏重于内存管理以及实际运用,相对前几种要相对简单。 所谓单例模式,就是一种让某个类只产生单一实例的模式...
  • u013054715
  • u013054715
  • 2016年05月23日 22:43
  • 4396

浅谈常见设计模式--单例模式 简单工厂模式

今题那站在这里和大家一起分享最近在一本书上看到的关于设计模式的内容,接下来要讲的设计模式有: 单例模式 简单工厂模式 工厂方法和抽象工厂 代理模式 命令模式 策略模式 门面模式 桥接模式 观察者模式 ...
  • xikai18827083487
  • xikai18827083487
  • 2016年11月13日 17:04
  • 969

学习设计模式--观察者模式(C++)

1. 说说简单的函数回调 首先说说一种简单的函数回调机制(一种通过获取对象的指针来进行函数的调用方法)下面是代码演示--- 这是观察者(被回调)部分: class Observer { pu...
  • moxiaomomo
  • moxiaomomo
  • 2012年05月30日 02:16
  • 3409

C#设计模式(1)——单例模式(讲解非常清楚)

一、引言 最近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了...
  • u013472838
  • u013472838
  • 2015年04月02日 15:01
  • 706
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式学习--单例模式
举报原因:
原因补充:

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