意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

实用性:1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它。

    2.当这个唯一的实例应该是通过子类可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

效果:   1.只有一个实例,可以严格的控制客户怎样以及何时访问。

    2.缩小名空间,避免了唯一实例的全局变量污染名空间。

    3.可以控制对象的实例个数。

    

代码示例:这里类是一个人Micla,世界上仅有一个Mical,只能产生一个实例。

#ifndef _SINGLETON_
#define _SINGLETON_ class Mical{
public:
~Mical(){} static Mical* GetMical()
{
if(NULL == _mpMical)
{
_mpMical = new Mical;
static Delete Del;
}
return _mpMical;
} private:
static Mical* _mpMical; ////避免了不同情况实例化类对象
Mical(const Mical& another){}
Mical& operator = (const Mical& another){}
Mical(){} }; #endif

实现部分:

#include <iostream>
#include "Singleton.h" using namespace std;
Mical* Mical::_mpMical = NULL; int main()
{
Mical* pMical = Mical::GetMical();
delete Mical::GetMical();
return ;
}

用Mical* pMical = Mical::GetMical();   实现了访问Micla  然后我们可以通过pMical访问Mical的各种属性(假设为:身高,性别等)

之后通过delete Mical::GetMical();  删除对象。  但这样的删除容易被遗忘,因为new的过程是被封装起来的。

于是通过内嵌类实现自动delete:

#ifndef _SINGLETON_
#define _SINGLETON_ class Mical{
public:
~Mical(){} static Mical* GetMical()
{
if(NULL == _mpMical)
{
_mpMical = new Mical;
static Delete Del;
}
return _mpMical;
} private:
static Mical* _mpMical; ////避免了不同情况实例化类对象
Mical(const Mical& another){}
Mical& operator = (const Mical& another){}
Mical(){} class Delete{
public:
Delete(){}
~Delete(){delete _mpMical;}
};
}; #endif

这就实现了Singleton;

要注意的是  1.封死其他的实例化接口      2.对象删除问题处理

单件模式(Singleton)C++实现的更多相关文章

  1. 单件模式Singleton来控制窗体被重复或多次打开

    本文转载:http://blog.csdn.net/a0700746/article/details/4473796 一般在百度搜一下,会出来一下内容,看来很好用.Singleton很方便的一个用处就 ...

  2. 设计模式 - 单件模式(singleton pattern) 具体解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/28595349 单件模式(singleton ...

  3. C#设计模式——单件模式(Singleton Pattern)

    一.概述在软件开发过程中,我们有时候需要保证一个类仅有一个实例,比如在一个电脑用户下只能运行一个outlook实例.这时就需要用到单件模式.二.单件模式单件模式保证一个类仅有一个实例,并提供一个访问它 ...

  4. 设计模式(二)单件模式Singleton(创建型)

    SINGLETON(单件)—对象创建型模式 几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的.您希望在应用程序中共享数据库句柄,因为在保持连接打开或关 ...

  5. [MyBean-说明书]关于插件的单件模式(singleton),插件的共享模式

    [说明] 单件模式是一种用于确保整个应用程序中只有一个类实例. 想想我们的系统中有哪些方面可以应用到单件模式,比如大家常说的连接(ADOConnection)共享,其实就是指的单件模式. [MyBea ...

  6. 说说设计模式~单件模式(Singleton)

    单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点. 从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { ...

  7. 设计模式----创建型型模式之单件模式(Singleton pattern)

    单件模式,又称单例模式,确保一个类只有一个实例,并提供全局访问点. 单件模式是比较简单且容易理解的一种设计模式.只有一个实例,通常的做法...TODO 类图比较简单,如下所示: 示例代码: 懒汉模式( ...

  8. 夜话JAVA设计模式之单例模式(单件模式Singleton)

    单例模式也叫单件模式,就是确保一个类只有一个实例,并提供一个全局访问点. 设计成单例即把某个类设计成我们自己管理的单独实例,避免实例对象的重复创建,我们只有通过单例类的全局访问点获取实例. 下面来看金 ...

  9. 1.单件模式(Singleton Pattern)

    意图:为了保证一个类仅有一个实例,并提供一个访问它的全局访问点. 1.简单实现(多线程有可能产生多个实例) public class CommonSigleton { /// <summary& ...

随机推荐

  1. Lost connection to MySQL server at 'reading authorization packet', system error: 0_Mysql

    1.大多数时候设置"set global connect_timeout=60:"是可以解决问题的. 我们可以通过执行“SHOWSTATUS LIKE 'aborted%'”,可以 ...

  2. 从输入url到页面展示出来经历了哪些过程

    本文只是一个整理向的随笔,以个人思路来简化的同时进行适当的拓展,如有错误,欢迎指正. 1.输入网址.  此时得到一个url 2.域名解析 整个过程都是dns系统在发挥作用,它的目的是将域名和ip对应起 ...

  3. 【转载】push to origin/master was rejected错误解决方案

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a137151062/article/details/78820806idea中,发布项目到OSChi ...

  4. 创建对象—从es5到es6

    原文地址 本文主要讲述了使用JavaScript创建对象的几种方式,分别是传统的Object构造函数.对象字面量.工厂模式.构造函数模式.原型模式.组合模式,以及es6的class定义类.然后从bab ...

  5. tesuto-Mobius

    求 \begin{equation*}\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]\end{equation*} 的值. 莫比乌斯反演吧. \begin{align*}& ...

  6. 无法启用internet连接共享,为LAN连接配置的IP地址需要使用自动IP寻址

    热点不能用了,一直都不知道为什么,今天查了一些资料,终于知道了原因,是因为我安装了VMware Workstation Pro ,它生成了VMnet1和VMnet8所在的两个网段,这个网段就和热点共享 ...

  7. salt 根据ip修改主机名

    首先定义pillar [root@web1 pillar]# cat hostname.sls ip_hostname: 10.1.1.1: web1 10.1.1.2: web2 10.1.1.3: ...

  8. 47.serch基本语法

    主要知识点 1._search api基本语法 2.http协议中get请求带上request body     一.search api的基本语法     1.GET /_search {所传递的参 ...

  9. 【ABCD组】Scrum meeting 1

    前言 第1次会议在6月13日由组长在教9 405召开. 主要对下一步的工作进行说明安排,时长90min. 任务分配 姓名 当前阶段任务 完成情况 所遇困难 贡献时间 下阶段任务 朱石景 编写登录界面代 ...

  10. IntelliJ IDEA 和 webstorm更换主题

    1. 搜索http://color-themes.com/?view=index 2. 查找自己喜欢的主题,下载 3. 放在安装位置(个人习惯,放在哪都行,能找到就行) 4. 然后打开importSe ...