栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

单例模式 1.概念
	1.1  单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。
	1.2 从结构图中可以知道,有一个叫做Singleton的类,属性是一个函数,函数的返回值是本身的数据类型,函数的类型是私有的,方法是两个构造函数(用来在创建对象时初始化对象,即为对象成员变量赋初始值),通过Singleton()来创建实例,通过GetInstance()来获取实例

2.实现单例的步骤
	2.1 构造函数私有化
	2.2 提供一个全局的静态方法
	2.3 在类中定义一个静态指针,指向本类的变量的静态变量指针
3.C语言实现单例模式
#include "stdio.h"
#include 

typedef struct
{
	int flag;
}_singleton;


static void singletonInit(_singleton *p, int flag)
{
	p->flag = flag;
	
}

_singleton* getSingleton(void)
{
	static _singleton *singletonPoint = NULL;
	
	if(NULL == singletonPoint)
	{		
		singletonPoint = (_singleton*)malloc(sizeof(_singleton));
		singletonInit(singletonPoint , 1);
	}
	
	return singletonPoint;
}

int main()
{
	_singleton *singletonA = getSingleton();
	_singleton *singletonB = getSingleton();
	if(singletonA == singletonB)
	{
		printf("successrn");
	}
	else
	{
		printf("failrn");
	}
}

4.使用单例模式初始化一个串口示例
#include "stdio.h"
#include 


typedef void (*_usart1Init)(int buoud);
typedef struct
{
	int 		bound;
	_usart1Init usart1Init;
}_singleton;


void uart1Init(int bound)
{
	printf("初始化串口1完成 波特率 = %drn", bound);
}


static void singletonInit(_singleton *p, int bound, _usart1Init funcPoint)
{
	p->bound = bound;
	p->usart1Init = funcPoint;
	p->usart1Init(bound);
	
}


_singleton* getSingleton(void)
{
	static _singleton *singletonPoint = NULL;
	
	if(NULL == singletonPoint)
	{		
		singletonPoint = (_singleton*)malloc(sizeof(_singleton));
		singletonInit(singletonPoint , 115200, uart1Init);
	}
	
	return singletonPoint;
}

int main()
{
	_singleton *singletonA = getSingleton();
	_singleton *singletonB = getSingleton();
	if(singletonA == singletonB)
	{
		printf("successrn");
	}
	else
	{
		printf("failrn");
	}
}

注:所有代码可运行在C 在线工具|菜鸟工具

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号