设计模式之十七:单例模式(Singleton)
来源:互联网 发布:西瓜数据 编辑:程序博客网 时间:2024/04/30 03:49
单例模式:
确保一个类只有一个实例化的对象并且提供了一个访问这个对象的方法。
UML图:
主要包括:
- Singleton(LoadBalancer):定义了一个操作唯一的对象的方法;负责创建和操作这个唯一的对象。
C++中实现单例模式是通过静态成员变量和静态方法来实现。
#include <iostream>class Singleton{public://这里要将这个方法定义成静态的static Singleton * getInstance();private:Singleton(){}private://静态成员函数只能操作静态成员变量,所以instance也应该是静态的static Singleton * instance;};//静态成员变量的初始化Singleton * Singleton::instance=NULL;Singleton * Singleton::getInstance(){if(instance==NULL)instance=new Singleton();return instance;}int main(){Singleton *s1=Singleton::getInstance();Singleton *s2=Singleton::getInstance();if(s1==s2)std::cout<<"s1 and s2 are the same object"<<std::endl;return 0;}
执行输出:
一个真实的例子,用来随机调度一个服务器来处理请求。
#include <iostream>#include <stdlib.h>#include <stdio.h>#include <time.h>#include <string>#include <vector>using namespace std;class LoadBalancer{public:static LoadBalancer * getInstance();string getServer(){int i=rand()%5;return servers[i];}private:LoadBalancer(){servers.push_back("server I");servers.push_back("server II");servers.push_back("server III");servers.push_back("server IV");servers.push_back("server V");}private:staticLoadBalancer * instance;vector<string> servers;};LoadBalancer * LoadBalancer::instance=NULL;LoadBalancer * LoadBalancer::getInstance(){if(instance==NULL)instance=new LoadBalancer();return instance;}int main(){srand(time(0));LoadBalancer * load1=LoadBalancer::getInstance();LoadBalancer * load2=LoadBalancer::getInstance();cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;cout<<load1->getServer()<<endl;delete load1;return 0;}
执行输出:
0 0
- 设计模式之十七:单例模式(Singleton)
- 设计模式实现(十七)---单例模式(SingleTon)
- 设计模式之单例模式Singleton
- 【设计模式】之 Singleton 单例模式
- 设计模式之单例模式(Singleton)
- 设计模式之单例模式(Singleton)
- 设计模式之单例模式Singleton
- 设计模式之单例模式-Singleton
- 设计模式之单例模式Singleton
- 设计模式之单例模式(Singleton)
- 设计模式之单例模式(Singleton)
- 设计模式之单例模式(Singleton)
- 设计模式之单例模式:singleton
- 设计模式之单例模式(Singleton)
- 设计模式之单例模式Singleton
- 设计模式之 单例模式(Singleton)
- 设计模式之单例模式(Singleton)
- 设计模式之单例模式(Singleton)
- Android以请求参数来获取网络数据
- linux top指令
- 不要在公共接口中传递STL容器
- 个人改良的接口命名规范
- linux的mount命令详解
- 设计模式之十七:单例模式(Singleton)
- MSSQL2005_x64位标准版安装问题解决整理
- js 特校代码网站
- 如何声明字体?
- 利用转折关系解决GRE填空
- vector.resize 与 vector.reserve的区别
- Reverse Linked List(反转链表)
- virtualbox分配USB设备,之后鼠标不能用了
- oracle数据库cpu使用率高