设计模式(1) –单例模式(Singleton)
来源:互联网 发布:免费网络发布平台大全 编辑:程序博客网 时间:2024/05/29 09:02
首先,单例模式是对象的创建模式之一,单例模式的三个特点:
1,该类只有一个实例
2,该类自行创建该实例(在该类内部创建自身的实例对象)
3,向整个系统公开这个实例接口
有人可能会问这样的方式可以用在哪里,哪里比较适合使用?举个例子,倚天剑只有一把,可能在张无忌手中 可能在杨逍手中当然也有可能在赵敏手中,如果我们将倚天剑设置为一个普通的类,那么就可能出现一个倚天剑重复实例化的情况,金庸的世界可不是咱这,山寨货那么多。。。 所以这个时候将倚天剑当做一个单例类就可以避免这样的情况出现。
因此我们就可以设计出一个倚天剑的单例类:
头文件:
/*版权说明: 本代码版权 为 糙级码lee 所有转载请注明来自:http://blog.csdn.net/zerolxl */#ifndef _SINGLETON_YITIANJIAN__H__#define _SINGLETON_YITIANJIAN__H__#include <string>enum WHOHAND{WH_UNKONW=0,WH_ZHANGWUJI=1,WH_ZHAOMING=2,WH_YANGXIAO=3};class CSingletonYitianJian{public:/*func: GetInstance()brief: 获得倚天剑*/static CSingletonYitianJian &GetInstance();/*func: OpChuZhao()brief: 出招*/void OpChuZhao();/*@func: SetWhoHand(int enWhosHand);@brief: 设置剑在谁手中@param: enWhosHand 谁的手中*/void SetWhoHand(int enWhosHand);/*@func: ShowInWhoHand();@brief: 查看剑在谁手中*/ void ShowInWhoHand();private://构造函数 CSingletonYitianJian();// 声明 但不实现,防止产生了一个类拷贝 CSingletonYitianJian(const CSingletonYitianJian&); CSingletonYitianJian & operator = (const CSingletonYitianJian&);private: WHOHAND m_enWhosHand; //见在谁手上 std::string m_strOwner; //拥有者};#endif类文件:
/*版权说明: 本代码版权 为 糙级码lee 所有转载请注明来自:http://blog.csdn.net/zerolxl */#include "stdafx.h"#include "Singleton.h"#include <string>#include <iostream>using namespace std;CSingletonYitianJian::CSingletonYitianJian(){cout<< "磨剑 。。磨剑 。。 " <<endl;cout << "天下第一剑 ..--||========>" <<endl;m_strOwner="神秘人";}CSingletonYitianJian &CSingletonYitianJian::GetInstance(){static CSingletonYitianJian instance;return instance;}void CSingletonYitianJian::OpChuZhao(){cout<< m_strOwner+":出大招啦~~" <<endl;}void CSingletonYitianJian::SetWhoHand(int nWhosHand){m_enWhosHand=(WHOHAND)nWhosHand;switch (m_enWhosHand){case WH_ZHAOMING:m_strOwner="赵敏";break;case WH_ZHANGWUJI:m_strOwner="张无忌";break;case WH_YANGXIAO:m_strOwner="杨逍";break;default:m_strOwner="神秘人";m_enWhosHand=WH_UNKONW;break;}}void CSingletonYitianJian::ShowInWhoHand(){switch (m_enWhosHand){case WH_UNKONW:cout<< "倚天剑丢了。。。" <<endl;m_strOwner="神秘人";break;case WH_ZHAOMING:cout<< "倚天剑在赵敏手中" <<endl;m_strOwner="赵敏";break;case WH_ZHANGWUJI:cout<< "倚天剑在张无忌手中" <<endl;m_strOwner="张无忌";break;case WH_YANGXIAO:cout<< "倚天剑在杨逍手中" <<endl;m_strOwner="杨逍";break;}}main函数:
/*版权说明: 本代码版权 为 糙级码lee 所有转载请注明来自:http://blog.csdn.net/zerolxl */#include "stdafx.h"#include "Singleton.h"#include <string>#include <iostream>#include <windows.h>using namespace std;int _tmain(int argc, _TCHAR* argv[]){cout<<"构造下~~\n"<<endl;CSingletonYitianJian::GetInstance();cout<<"\n"<<endl;int i=rand()%3;CSingletonYitianJian::GetInstance().SetWhoHand(i);CSingletonYitianJian::GetInstance().ShowInWhoHand();CSingletonYitianJian::GetInstance().OpChuZhao();cout<<"\n"<<endl;Sleep(1000);i=rand()%4;CSingletonYitianJian::GetInstance().SetWhoHand(i);CSingletonYitianJian::GetInstance().ShowInWhoHand();CSingletonYitianJian::GetInstance().OpChuZhao();cout<<"\n"<<endl;Sleep(1000);i=rand()%3;CSingletonYitianJian::GetInstance().SetWhoHand(i);CSingletonYitianJian::GetInstance().ShowInWhoHand();CSingletonYitianJian::GetInstance().OpChuZhao();getchar();return 0;}
类图:
输出:
单例类适用场景:
在实际开发过程中,有时候我们可能遇到这样的情况,我们可能编写了很多个类,这个时候我们可能需要将这个许多类中产生的数据录到数据库中,我们需要创建一个数据库的操作句柄供给这许多类来使用,那么我们可能有两种解决方案:
1.修改 各个类的实现,将数据库操作句柄传递给各个类,保留为成员变量,然后用这个成员变量进行入库操作。
2.我们可以使用单例类实例化一个数据库操作类,在各个类中我只需要在入库的地方调用实例化接口,进行入库。
比较两者我们容易发现,后者较前者的改动性小,同时维护性也更高,可以将入库的操作集中在单例类中。
代码地址:http://download.csdn.net/detail/zerolxl/4604349
版权说明: 本代码版权 为 糙级码lee 所有
转载请注明来自:http://blog.csdn.net/zerolxl
- 设计模式(1) –单例模式(Singleton)
- 设计模式 – 单例模式(Singleton)
- 设计模式(1)-单例模式Singleton
- 设计模式---单例模式(singleton)
- 设计模式--单例模式(Singleton)
- 设计模式--单例模式(Singleton)
- 设计模式-单例模式(Singleton)
- 【设计模式】-单例模式(Singleton)
- 设计模式---单例模式(singleton)
- 设计模式 -- 单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式:单例模式(Singleton)
- 设计模式-单例模式(Singleton)
- 【设计模式】单例模式(Singleton)
- 设计模式-单例(Singleton)模式
- linux历程--管道通信
- ARM 2410 可执行文件的函数入口问题
- ci框架 2_表单验证(未完善)
- Hadoop中HDFS文件系统NameNode的Federation设计文档(HDFS-1052:Hdfs scalability with multiple namenodes)
- 用 ElementTree 在 Python 中解析 XML
- 设计模式(1) –单例模式(Singleton)
- Ubuntu根目录文件作用分析
- XP系统下安装Linux Centos5.4 的过程与体会
- 聚合索引(clustered index) / 非聚合索引(nonclustered index)
- 使用 ElementTree,以 Python 语言处理 XML
- 大唐电信JAVA笔试题(不知道是哪一年滴)
- Linux终端设备驱动
- vim 技巧: 添加~/.vimrc
- HashMap以及hash冲突知识