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
  • 转载请注明出处,谢谢!
查看全文
  • 相关阅读:
    二叉排序树
    C# 大端与小端
    【转】C#socket通信
    【转】Github 搜索技巧,快速找到好资源
    web api 跨域请求,ajax跨域调用webapi
    【转】Linux简介及最常用命令
    【转】带你吃透RTMP
    09-vuex基本应用之计数demo
    08-配置vue路由的步骤
    02-原型与原型链
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/singletonCppCodeTest20120613.html
  • Copyright © 2011-2022 走看看