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

  • 相关阅读:
    浅谈Linux文件操作
    数据结构学习--队列
    CODE[VS] 1099 字串变换
    CODE[VS] 1026 逃跑的拉尔夫
    CODE[VS] 3027 线段覆盖 2
    LeetCode8.字符串转换整数(atoi) JavaScript
    JS实现继承 JavaScript
    LeetCode7.整数反转 JavaScript
    LeetCode6.Z字形变换 JavaScript
    LeetCode5.最长回文子串 JavaScript
  • 原文地址:https://www.cnblogs.com/yuaren/p/3457191.html
Copyright © 2011-2022 走看看