1.1 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。 1.2 从结构图中可以知道,有一个叫做Singleton的类,属性是一个函数,函数的返回值是本身的数据类型,函数的类型是私有的,方法是两个构造函数(用来在创建对象时初始化对象,即为对象成员变量赋初始值),通过Singleton()来创建实例,通过GetInstance()来获取实例2.实现单例的步骤
2.1 构造函数私有化 2.2 提供一个全局的静态方法 2.3 在类中定义一个静态指针,指向本类的变量的静态变量指针3.C语言实现单例模式
#include "stdio.h" #include4.使用单例模式初始化一个串口示例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"); } }
#include "stdio.h" #includetypedef 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 在线工具|菜鸟工具



