单例模式 OP

// Use of this source code is governed by a BSD-style license
// that can be found in the License file.
//
// Author: Shuo Chen (chenshuo at chenshuo dot com)

#ifndef MUDUO_BASE_SINGLETON_H
#define MUDUO_BASE_SINGLETON_H

#include <boost/noncopyable.hpp>
#include <pthread.h>
#include <stdlib.h> // atexit

namespace muduo
{

template<typename T>
class Singleton : boost::noncopyable
{
 public:
  static T& instance()
  {
    pthread_once(&ponce_, &Singleton::init);
    return *value_;
  }

 private:
  Singleton();
  ~Singleton();

  static void init()
  {
    value_ = new T();
    ::atexit(destroy);
  }

  static void destroy()
  {
    typedef char T_must_be_complete_type[sizeof(T) == 0 ? -1 : 1];
    delete value_;
  }

 private:
  static pthread_once_t ponce_;
  static T*             value_;
};

template<typename T>
pthread_once_t Singleton<T>::ponce_ = PTHREAD_ONCE_INIT;

template<typename T>
T* Singleton<T>::value_ = NULL;

}
#endif

 

Singleton<Cache>::instance().GetData(pResource->name, strSendData)

### 适用于C语言的设计模式 #### 单例模式 (Singleton Pattern) 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这可以通过静态局部变量和函数指针来实现,在C语言中同样有效[^1]。 ```c #include <stdio.h> struct Singleton { int value; }; static struct Singleton *singleton_instance = NULL; struct Singleton* get_singleton() { if (!singleton_instance) { singleton_instance = malloc(sizeof(struct Singleton)); singleton_instance->value = 0; // 初始化值 } return singleton_instance; } ``` #### 命令模式 (Command Pattern) 命令模式将请求封装成对象,从而使可用不同的请求对客户进行参数化;支持可撤销的操作。此模式利用结构体存储操作数据,并定义一系列处理该结构体的接口函数[^3]。 ```c typedef void (*Action)(void); // 定义具体动作 void action_a(void){ printf("Executing Action A\n"); } // 将多个动作存入数组并依次调用 int main(){ Action commands[] = {action_a}; for(int i=0;i<sizeof(commands)/sizeof(Action);i++){ commands[i](); } return 0; } ``` #### 工厂方法模式 (Factory Method Pattern) 工厂方法模式用于创建产品族的对象而无需指定具体的类名。在C语言里,可以借助宏定义或函数指针作为工厂方法的一部分来间接达到目的[^4]。 ```c #define CREATE_CALCULATOR(type, operation)\ type##_calculator_create(operation) typedef float(*OperationFunc)(float a, float b); typedef struct Calculator{ OperationFunc op_func; }Calculator; Calculator add_calculator_create(OperationFunc func){ Calculator calc={func}; return calc; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值