Design Pattern Singleton 单一模式

单一模式的几个注意点:

一) 设计单一模式,首先需要把构造函数给私有化了,不让外界访问,那么外界只能通过提供的函数获取一个新的类。

二) C++的单一模式,记得要在类外初始化一个类,否则或内存出错的。

三) 这个唯一的类必须是要静态的

程序:

#ifndef _SINGLETON_H
#define _SINGLETON_H

#include <iostream>
#include <string>

using namespace std;

class DuGuJiuJian
{
	string FounderName;

	DuGuJiuJian(string name) : FounderName(name)
	{
	}

	~DuGuJiuJian()
	{
		if (Founder) delete Founder;
	}

public:
	void poJian()
	{
		cout<<"破剑式……\n";
	}

	void poDao()
	{
		cout<<"破刀式……\n";
	}

	inline static DuGuJiuJian *getInstance(string name = "No Name")
	{
		if (!Founder)
		{
			Founder = new DuGuJiuJian(name);
		}
		return Founder;
	}

	string getFounder()
	{
		return FounderName;
	}

private:
	static DuGuJiuJian *Founder;
};

DuGuJiuJian *DuGuJiuJian::Founder = nullptr;

void SingletonDuGuJiuJian_Run()
{
	DuGuJiuJian *jian = DuGuJiuJian::getInstance("独孤求败");

	cout<<"Founder is:"<<jian->getFounder()<<endl;

	DuGuJiuJian *jian_2 = DuGuJiuJian::getInstance("令狐冲");

	cout<<"Founder is:"<<jian_2->getFounder()<<endl;

	cout<<"令狐冲";
	jian_2->poDao();
	cout<<"令狐冲";
	jian_2->poJian();

	cout<<"Founder is:"<<DuGuJiuJian::getInstance()->getFounder()<<endl;
}
#endif

运行:

因为是单一模式,所以只能有一个创始人独孤求败,呵呵,冲哥可以使用,不能是创始人。

当然,本类不是十分完善,比如:还有多线程的时候可能会出问题,内存释放需要处理好,可以使用临时静态类。

不过这个模式的概念就是这样了。

Design Pattern Singleton 单一模式,布布扣,bubuko.com

时间: 2024-10-14 15:03:10

Design Pattern Singleton 单一模式的相关文章

Design Pattern —— Singleton

Design Pattern —— Singleton   强力推荐枚举和类级内部类方式实现单例模式 单例模式是开发中非常常用的一种模式,简单的说,我们希望一个类永远都只有一个对象. 主要有两个用途: 1.存储一些进程内共享的值(不是很推荐,大部分情况下还是应该用局部变量,互相传递值的方式) 2.任何时候都不变的操作 单例模式的实现目前已知的有五种: 1.饿汉式 2.懒汉式 3.双重验证 4.类级内部类 5.枚举 一.饿汉式 类加载时就创建好对象,以空间换时间.这样外部调用EagerSingle

Design Pattern Visitor 访问者模式

访问者模式,就是我们已经有一系列的对象了,那么就可以使用一个visitor对象一次性遍历所有的对象,就好像这个visitor访问了所有这些对象一样,所以就叫访问者模式. 实现起来也很简单,就是三个基类,其他类都是这些基类的衍生类. 下面的Action类就是访问者类了,而Person类就是被访问的对象类,而House是一个接待容器,可以接待不同的Action类. #include <stdio.h> #include <iostream> #include <string>

Mediator Design Pattern 中介者模式

就是设计一个Mediator类,可以处理其他类的关系. Mediator类: 1 拥有其他所有类的实例对象 2 设置一个接口供其他类使用,其他类也拥有一个Mediator类成员,只需调用这个Mediator接口函数使用,无需自己处理关系. 3 Mediator内部已经设置好各个类的关系了,其他类只要直接使用Mediator处理关系就可以了. 下面是一个聊天室聊天是处理关系的实例程序: 进入聊天室的人只需要选定和谁聊天就可以了,无需担心这些信息是如何传递的,这个已经由Mediator自动处理了.

[Design Pattern] Singleton Pattern 简单案例

Singleton Pattern, 即单例模式,用于获取类的一个对象,该对象在整个应用中是其类的唯一对象.单例模式属于创建类的设计模式. SingleObject 作为单例类,内含了一个静态私有的 SingleObject 成员变量,将构造方法私有化使得外部无法构造 SingleObject 的对象,同时提供一个公共的 getInstance 方法,提供唯一的对象. 代码实现: 单例类 SingleObject public class SingleObject { private stati

Strategy Design Pattern(策略模式)

策略模式意义在于,当我们有多种不同的算法时,程序能够动态的选择算法进行计算. 策略模式的另外一个英文名字是Policy Strategy. 策略模式最典型的里一个例子就是JAVA中复杂对象的排序(java.util.Arrays.sort,java.util.Collections.sort),用户可以自己定义各种排序算法(规则),然后在需要排序时将算法传给排序函数.从而实现排序方式的变化,获得不同的排序结果.参见:http://my.oschina.net/nox/blog/487478 下面

Proxy Design Pattern(代理模式)

代理模式的目标是通过代理类来隔离访问者对目标类的直接访问,访问者只能访问代理类,这样能够保证访问者对目标类的访问是受限的. 比如访问某些资源,如果访问者不具备访问的权限或条件,则代理类可以拒绝访问者的访问.这是常见实现权限的方式之一. 简单的代码可以描述该模式: package dp.proxy; public interface FileAccessor{ public void readFile(String filePath); } package dp.proxy; public cla

[Design Pattern] 抽象工厂模式

工厂方法模式 让一个具体的类对应一个工厂.然后把所有工厂进行抽象.通过抽象工厂实现具体的工厂来创建对象.如果需要新增一个类,那么就需要创建一个工厂类来创建对象 优点: 1. 符合开闭原则.是简单工厂改进 2. 实现创建和使用分离 缺点: 1. 类的个数庞大.增加一个具体对象类就需要增加一个对应工厂类.增加维护成本 参考代码: class Fruit { public: virtual void showName() = 0; }; class Apple : public Fruit { pub

Design Pattern - Singleton

单例模式 定义:确保一个类只有一个实例,并提供一个全局访问点. 设计思路 私有化构造函数,使外界不能创建该类的实例 对外开放一个共有静态方法,用于并返回全局唯一实例. 示例代码(C#) /// <summary> /// 单例模式的实现 /// </summary> public class Singleton { private static Singleton m_Singleton; private static readonly object locker = new ob

简单工厂设计模式(Simple Factory Design Pattern)

[引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见解的是,区分了设计模式(Design Pattern),结构模式(Architecture Pattern),架构类型(Architecture Style). 如下图所示 Design Pattern:是基于代码层面的,就是针对解决功能模块之间的问题而采用恰当的设计模式,比如依赖注入,简单工厂,适