设计模式之十七:单例模式(Singleton)

单例模式:

确保一个类只有一个实例化的对象并且提供了一个访问这个对象的方法。

UML图:

主要包括:

  1. 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:
			static	LoadBalancer * 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;
}

执行输出:

时间: 2024-08-27 23:33:31

设计模式之十七:单例模式(Singleton)的相关文章

【白话设计模式四】单例模式(Singleton)

转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二]外观模式(Facade) [白话设计模式三]适配器模式(Adapter) [白话设计模式四]单例模式(Singleton) [白话设计模式五]工厂方法模式(Factory Method) [白话设计模式六]抽象工厂模式(Abstract Factory) [白话设计模式七]策

.NET设计模式实例之单例模式( Singleton Pattern)

一.单例模式简介(Brief Introduction) 单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点.单例模式因为Singleton封装它的唯一实例,它就可以严格地控制客户怎样访问它以及何时访问它. 二.解决的问题(What To Solve) 当一个类只允许创建一个实例时,可以考虑使用单例模式. 三.单例模式分析(Analysis)1.单例模式结构 Singleton类,定义一个私有变量instance;私有构造方法Singleton(

JavaScript设计模式 Item 6 --单例模式Singleton

单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器的window对象.在js开发中,单例模式的用途同样非常广泛.试想一下,当我们单击登录按钮的时候,页面中会出现一个登录框,而这个浮窗是唯一的,无论单击多少次登录按钮,这个浮窗只会被创建一次.因此这个登录浮窗就适合用单例模式. 1.单例模式的使用场景 在使用一种模式之前,我们最好要知道,这种模式的使用场景.用了这么久的单例模式,竟全然不知!用它

Python设计模式 - 创建型 - 单例模式(Singleton) - 十种

对于很多开发人员来说,单例模式算是比较简单常用.也是最早接触的设计模式了,仔细研究起来单例模式似乎又不想看起来那么简单.我们知道单例模式适用于提供全局唯一访问点,频繁需要创建及销毁对象等场合,的确方便了项目开发,但是单例模式本身也有一定的局限性,如果滥用则会给后续软件框架的扩展和维护带来隐患. 单例模式的实现有很多种,应用场合也各有不同,但必须保证实例唯一,如果是多线程环境则必须保证线程安全.python本身有很多内置特性可以用来实现单例模式的效果,理清每种单例模式的实现原理.优缺点及使用场合才

设计模式之五:单例模式(Singleton Pattern)

单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有三个要点: 点某个类只能有一个实例: 它必须自行创建这个实例 它必须自行向整个系统提供这个实例. 一些资源管理器常常设计成单例模式. C#中的单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点 实现要点: 单例模式是限制而不是改进类的创建. 单例模式一般不要支持Icloneable接口,因为这可能导致多个对象实例,与单例模式的初衷违背. 单例模式一般

设计模式之三:单例模式singleton

单例设计模式确切的说就是一个类只有一个实例,有一个全局的接口来访问这个实例.当第一次载入的时候,它通常使用延时加载的方法创建单一实例. 提示:苹果大量的使用了这种方法.例子:[NSUserDefaults standerUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager] 都返回一个单一对象. 你可能想知道你为什么要关心一个类有多个的实例.代码

php设计模式——单例模式(Singleton)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 谷歌的Android设备 华为的Android设备 IOS只属于苹果公司 IOS只属于苹果公司 1 <?php 2 3 /* 4 * php

设计模式之——单例模式(Singleton)的常见应用场景(转):

单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此有些设计大师并把把其称为设计模式之一. 这里又不具体讲如何实现单例模式和介绍其原理(因为这方便的已经有太多的好文章介绍了),如果对单例模式不了解的可以先看下:http://terrylee.cnblogs.com/archive/2005/12/09/293509.html . 好多没怎么使用过的人

Java 设计模式 单例模式(Singleton) [ 转载 ]

Java 设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创建对象 第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 private Singleton (){} 4 5 public static Singleton getInstan

Android设计模式——单例模式(Singleton)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import