【2013.1.16】真相永远只有一个——Singleton
来源:互联网 发布:怎么删除淘宝空间图片 编辑:程序博客网 时间:2024/05/15 05:14
// // // // // // // // //
///2013.1.16
// // // // // // // // //
如果说评选一个最简单的设计模式的话,
Singleton当之无愧。
【核心】利用static使类与对象一一对应,并将类的构造函数私有化。
但单纯的外表下是Singleton强大的灵魂。
这一点童鞋们也能从今年的面向对象考试题中看出来(填空第一题就写Singleton…)。
在实际的编程应用中也不乏其拥有明显特征的代码身影。
最简单的例子,
就是假设我们创建一个类叫做HumanPlanet,那么应该只有一个名为Earth的实例。
值得一提的是,
这个模式在Java中是非常重要的,
因为在纯面向对象的范式中,是不可以使用static的。
还有很多人因为这个模式易用所以开始滥用,
但首先要注意两点:
1.使用单例不一定会节省内存。因为它的生命周期是Forever Until u delete it by yourself.
2.在需要扩展的结构当中,尽量不要使用单例,原因很简单,static容易扩展么?
接下来是示例代码。
HumanPlanet.h
#ifndef _HUMAN_PLANET_H_#define _HUMAN_PLANET_H_class HumanPlanet{private:static HumanPlanet* earth;protected://Constructor couldn't be accessed from outside.HumanPlanet(){}public:static HumanPlanet* GetHumanPlanet();//This function only used to test this class is exist.void saySomething();};#endif
#include"HumanPlanet.h"#include<iostream>//Initial static variable before use it.HumanPlanet* HumanPlanet::earth = 0;HumanPlanet* HumanPlanet::GetHumanPlanet(){if(earth == nullptr)earth = new HumanPlanet();return earth;}void HumanPlanet::saySomething(){std::cout<<"Only one earth,please love and protect this beautiful planet."<<std::endl;return;}
main.cpp
#include "HumanPlanet.h"int main(){HumanPlanet* planet = HumanPlanet::GetHumanPlanet();planet->saySomething();return 0;}
最后需要注意的是,
在c++中不可以直接使用静态函数的返回值来do something.(And i knew this point after i programming this example...)
- 【2013.1.16】真相永远只有一个——Singleton
- 真相只有一个
- 真相永远只有一个!柯南病毒专偷QQ密码(1119)1
- 保证类只有一个实例(Singleton)
- x265很强,永远的0只有1G多,可效果完全不输8G,有图有真相
- 确保类只有一个实例 ,C++设计模式之Singleton
- 设计模式-Singleton模式(只有一个实例)
- Servlet —— 只有一个实例
- Servlet —— 只有一个实例
- java__有一个奇怪的国家,里面的国民对于事情的态度永远只有两面。当两个人遇到一起讨论一个事情的时候——两个持赞同观点的人遇到一起后会对这个事情都继续赞同;一个持赞同观点的人遇到一个持不赞同观点的人
- C# Singleton 如何实现多线程多实例,每个线程中有且只有一个实例
- C++设计模式5--单例模式Singleton--当前对象只有一个实例
- C++设计模式5--单例模式Singleton--当前对象只有一个实例 .
- 62. 只有代码会告诉你真相
- 只有程序员了解的9个真相
- 只有程序员了解的9个真相
- 只有程序员了解的9个真相
- 只有程序员了解的9个真相!
- Ext.each 中途跳出得方法
- JavaSE第八十六讲:Java IO详解
- 八年级作文-第N次大战
- 网络编程1 - socket基本函数
- PKU 1185 炮兵阵地 经典状态压缩dp
- 【2013.1.16】真相永远只有一个——Singleton
- 合并相似算法
- MySQL 数据类型
- Asp.Net MVC结合Linq to SQL实现CRUD
- 46、JVM之类加载器
- drools介绍
- c# WinForm 中英文智能提示
- ubuntu下配置samba
- 树形dp 和 状态压缩dp