zoukankan      html  css  js  c++  java
  • 设计模式笔记:单例模式(C++代码)

    定义:
    一个类有且仅有一个实例,并且提供一个访问它的全局访问点。
    要点:
    1、类只能有一个实例;
    2、必须自行创建此实例;
    3、必须自行向整个系统提供此实例。

    实现一:单例模式结构代码

    singleton.h:

    View Code
    #ifndef _SINGLETON_H_
    #define _SINGLETON_H_
    
    class Singleton
    {
    public:
        static Singleton* GetInstance();
    protected:
        Singleton();
    private:
        static Singleton *_instance;
    };
    
    #endif

    singleton.cpp:

    View Code
    #include "singleton.h"
    #include <iostream>
    using namespace std;
    
    Singleton* Singleton::_instance = 0;
    
    Singleton::Singleton()
    {
        cout<<"create Singleton ..."<<endl;
    }
    
    Singleton* Singleton::GetInstance()
    {
        if(0 == _instance)
        {
            _instance = new Singleton();
        }
        else
        {
            cout<<"already exist"<<endl;
        }
    
        return _instance;
    }

    main.cpp:

    #include "singleton.h"
    
    int main()
    {
        Singleton *t = Singleton::GetInstance();
        t->GetInstance();
    
        return 0;
    }

    实现二:打印机实例

    singleton.h:

    View Code
    #ifndef _SINGLETON_H_
    #define _SINGLETON_H_
    
    class Singleton
    {
    public:
        static Singleton* GetInstance();
        void printSomething(const char* str2Print);
    protected:
        Singleton();
    private:
        static Singleton *_instance;
        int count;
    };
    
    #endif

    singleton.cpp:

    View Code
    #include "singleton.h"
    #include <iostream>
    
    using namespace std;
    
    Singleton* Singleton::_instance = 0;
    
    Singleton::Singleton()
    {
        cout<<"create Singleton ..."<<endl;
        count=0;
    }
    
    Singleton* Singleton::GetInstance()
    {
        if(0 == _instance)
        {
            _instance = new Singleton();
        }
        else
        {
            cout<<"Instance already exist"<<endl;
        }
    
        return _instance;
    }
    
    void Singleton::printSomething(const char* str2Print)
    {
        cout<<"printer is now working , the sequence : "<<++count<<endl;
        cout<<str2Print<<endl;
        cout<<"done\n"<<endl;
    }

    main.cpp:

    #include "singleton.h"
    
    int main()
    {
        Singleton *t1 = Singleton::GetInstance();
        t1->GetInstance();
        t1->printSomething("t1");
    
        Singleton *t2 = Singleton::GetInstance();
        t2->printSomething("t2");
        return 0;
    }

    Makefile文件:

    CC=g++
    CFLAGS = -g -O2 -Wall
    
    all:
        make singleton
    
    singleton:singleton.o\
        main.o    
        ${CC} -o singleton main.o singleton.o
    
    clean:
        rm -rf singleton
        rm -f *.o
    
    .cpp.o:
        $(CC) $(CFLAGS) -c -o $*.o $<

    运行效果:

    可以看到,对打印顺序count的计数是连续的,系统中只有一个打印设备。

  • E-Mail : Mike_Zhang@live.com
  • 转载请注明出处,谢谢!
查看全文
  • 相关阅读:
    线上一个数组查询遇到的坑
    Java加密解密字符串
    图片和字符串相互转换
    fastweixin 微信服务器开发框架
    从url下载图片--java与python实现方式比较
    jvm 配置,看看
    牛腩新闻公布系统---外键约束下怎样删除记录
    jquery常见面试题
    [Oracle] 位图索引
    hadoop经常使用的压缩算法总结和实验验证
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/singletonCppCodeTest20120613.html
  • Copyright © 2011-2022 走看看