C与设计模式---单件模式

定义

  确保一个类只有一个实例,并提供一个全局访问点

要点

  • 单件模式确保程序中一个类最多只有一个实例
  • 单件模式提供访问这个实例的全局点

类图

  

代码实现及实例

  我们在编写某个产品设备的代码时,总是会涉及到设备的一些配置及运行参数。比如串口的波特率、带网络的还有IP地址,设备的编号名称等等。这些参数在整个系统中是唯一的,对这些参数的操作我们可以采用单件模式来实现

<Singleton>

typedef struct _singletonParam
{
    unsigned int  magic_num;
    unsigned int  dev_id;
    .
    .
    .
    .
    .  
}SingletonParam;

下面的代码获取到一个实例,为了保持和OO设计里面单件模式代码一致性,用动态分配内存的方式"实例化"一个SingletonParam

SingletonParam *get_singletonparam()
{
    static SingletonParam *gParam=0;
    
    if(gParam==0)
    {
         gParam=(SingletonParam *)malloc(sizeof(SingletonParam ));
        //判断下gParam是否为0
    }
   
   return gParam; 
}

剩下就是读写参数之类的函数了(全局访问点)

void set_param(unsigned int pval)
{
     SingletonParam *param=get_singletonparam();
     if(param==0)
           return;
     //设置某个参数项的值
}

实际应用中,可以不用动态分配内存的方式

白话

  单件模式在C中,说穿了在C中就是一个全局变量(个人理解)。但是在实际的应用中,你在实现某个功能函数或模块时,发现非要用全局变量才能实现,那就搞一个出来,并且对这个全局变量的读写等操作都要封装起来,不要怕麻烦。如果一个函数中大量的使用全局变量,不方便进行代码测试,要是还随便在函数里面直接对全局变量进行赋值操作,产品一出问题,等你来调试程序查找到出问题的函数或模块代码时,一看代码,头都是大的,全局变量太多了,你都不知道全局变量的值是在什么时候被谁修改了,哭死你,慢慢找吧。记住,写出来容易,维护难。代码不光是给机器用的,还有别的程序猿要看,要复用(吐槽下,搜狗的拼音打"程序员",直接出来"程序猿",无语。。。)

原文地址:https://www.cnblogs.com/yuaren/p/3457191.html