c++ 实现设计模式——单例(Singleton)模式

c++ 实现设计模式——单例(Singleton)模式

  • 单例模式的特点
  1. 单例类只能有一个实例
  2. 单例类必须自己给自己创建唯一的实例
  3. 所有对象通过提供的一个staitc的接口instance来获得这个唯一的实例
  • 单例模式使用场景举例
  1. 各种池的对象,比如进程池,线程池,数据库连接池,这些情况只能创建一个实例
  2. 工厂模式的工厂对象
  3. 负载均衡模型里面的任务分配器

这些实例都有一个共同的特点,那就是通过这些实例可以操作其它对象,它是一个公有的,大家都会来调用

  • 举个简单的代码例子
#include <iostream>
#include <memory>
using namespace std; 
 
enum phoneType {
    miType = 0,
    huaweiType,
    oppoType
};
 
class phone {
    public:
        virtual void show()=0; 
}; 
 
class mi:public phone{
    public:   
        void show() {
            cout<<"mi phone create"<<endl;
        }
};
 
class huawei: public phone {
    public:
        void show() {
            cout<<"huawei phone create"<<endl;
        }
};
 
class oppo: public phone {
    public:
        void show() {
            cout<<"oppo phone create"<<endl;
        }
};

class Factory {
    private:
        static Factory* factory;
        static int count;
    public:
        static Factory *Instance() {   //创建单例模式的地方
            if(NULL == factory) {
                factory = new Factory();
            }
            return factory;
        }
        Factory() {
            count++;
        }
        ~ Factory() {
            if(factory != NULL && count == 0) {
                delete factory;
                factory = NULL;
            }
        }
        
        phone*  createPhone(enum phoneType type) {
            if(type == miType) {
                return new mi();
            } else if (type == huaweiType) {
                return new huawei();
            } else if (type == oppoType){
                return new oppo();
            } else {
                return NULL;
            }
        } 
};

Factory* Factory::factory =NULL;
int Factory::count = 0;

int main() {
    Factory *f = Factory::Instance();
    f->createPhone(miType)->show();
    f->createPhone(huaweiType)->show();
    f->createPhone(oppoType)->show();
    delete f;
    return 0;
}

上面的代码例子就是以单例模式来创建工厂模式的工厂。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值