searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

C语言设计模式之单例模式

2023-10-12 01:38:32
21
0

一、介绍

单例模式(Singleton Pattern)确保某一个类只有一个实例,这个类称为单例类,单例模式是一种对象创建型模式。

思想思路如下:

  • 将构造函数访问权限变成private或protected,不允许类的外部创建对象

  • 提供一个静态成员函数,获取内部创建对象的地址

实现有两种方式:

  • 懒汉式

  • 饿汉式

二、饿汉式单例模式

饿了肯定要饥不择食,所以在单例类定义的时候就进行实列化。

#include <iostream>

using namespace std;

class HungrySingleton
{
public:
	static HungrySingleton *getInstance() {
		return object;
	}
protected:
	HungrySingleton() {}
	HungrySingleton(const HungrySingleton &other) {
		*this = other;
	}

private:
	static HungrySingleton *object;
};

HungrySingleton *HungrySingleton::object = new HungrySingleton;

优点: 线程安全

缺点: 还没有使用的时候,就已经创建了对象,浪费了内存空间

三、懒汉式单例模式

不到万不得已就不会实列化类,即只有第一次用到类实列的时候才会去实列化

#include <iostream>

using namespace std;

class LazySingleton
{
public:
	static LazySingleton *getInstance() {
		if(!object) { //A,B
			object = new LazySingleton;
		}
		return object;
	}
protected:
	LazySingleton() {}
	LazySingleton(const LazySingleton &other) {
		*this = other;
	}

private:
	static LazySingleton *object;
};

LazySingleton * LazySingleton::object = NULL;

优点: 在使用的时候,才会分配内存创建对象

缺点: 在多线程中使用,会出现创建多个对象的问题,线程不安全

0条评论
0 / 1000
songziyang
6文章数
0粉丝数
songziyang
6 文章 | 0 粉丝
原创

C语言设计模式之单例模式

2023-10-12 01:38:32
21
0

一、介绍

单例模式(Singleton Pattern)确保某一个类只有一个实例,这个类称为单例类,单例模式是一种对象创建型模式。

思想思路如下:

  • 将构造函数访问权限变成private或protected,不允许类的外部创建对象

  • 提供一个静态成员函数,获取内部创建对象的地址

实现有两种方式:

  • 懒汉式

  • 饿汉式

二、饿汉式单例模式

饿了肯定要饥不择食,所以在单例类定义的时候就进行实列化。

#include <iostream>

using namespace std;

class HungrySingleton
{
public:
	static HungrySingleton *getInstance() {
		return object;
	}
protected:
	HungrySingleton() {}
	HungrySingleton(const HungrySingleton &other) {
		*this = other;
	}

private:
	static HungrySingleton *object;
};

HungrySingleton *HungrySingleton::object = new HungrySingleton;

优点: 线程安全

缺点: 还没有使用的时候,就已经创建了对象,浪费了内存空间

三、懒汉式单例模式

不到万不得已就不会实列化类,即只有第一次用到类实列的时候才会去实列化

#include <iostream>

using namespace std;

class LazySingleton
{
public:
	static LazySingleton *getInstance() {
		if(!object) { //A,B
			object = new LazySingleton;
		}
		return object;
	}
protected:
	LazySingleton() {}
	LazySingleton(const LazySingleton &other) {
		*this = other;
	}

private:
	static LazySingleton *object;
};

LazySingleton * LazySingleton::object = NULL;

优点: 在使用的时候,才会分配内存创建对象

缺点: 在多线程中使用,会出现创建多个对象的问题,线程不安全

文章来自个人专栏
AI多面手
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0