Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

单件模式确保一个类只有一个实例,并提供一个全局访问点。

确定在性能和资源上的限制,然后小心地选择适当的方案来实现单件,以解决多线程的问题。


代码链接:点击打开链接


单件模式类图

Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现


源代码:

 

#ifndef CHOCOLATEBOILER_H

#define CHOCOLATEBOILER_H



#include<iostream>



class ChocolateBoiler

{

    private:

        ChocolateBoiler()

        {

            empty = true;

            boiled = false;

        }

        ~ChocolateBoiler()

        {

            uniqueInstance = 0;

        }

        ChocolateBoiler( const ChocolateBoiler& );

        void operator=( const ChocolateBoiler& );

    public:

        static ChocolateBoiler * getInstance()

        {

            if(uniqueInstance==0)

            {

                std::cout << "Creating unique instance of Chocolate Boiler" << std::endl;

                uniqueInstance = new ChocolateBoiler();

            }

            std::cout << "Returning instance of Chocolate Boiler"<< std::endl;

            return uniqueInstance;

        }

        void fill()

        {

            if(isEmpty())

            {

                empty = false;

                boiled =false;

            }

        }



        void drain()

        {

            if(!isEmpty() && isBoiled())

            {

                empty = true;

            }

        }



        void boil()

        {

            if(!isEmpty() && !isBoiled())

            {

                boiled = true;

            }

        }

        bool isEmpty()

        {

            return empty;

        }



        bool isBoiled()

        {

            return boiled;

        }

    protected:

    private:

        bool empty;

        bool boiled;

        static ChocolateBoiler* uniqueInstance;

};



#endif // CHOCOLATEBOILER_H


测试代码:

 

 

#include "ChocolateBoiler.h"



ChocolateBoiler* ChocolateBoiler::uniqueInstance = 0;

int main()

{

    ChocolateBoiler* boiler = ChocolateBoiler::getInstance();

    boiler->fill();

    boiler->boil();

    boiler->drain();



    ChocolateBoiler *boiler2= ChocolateBoiler::getInstance();

    if(boiler == boiler2)

        std::cout<<"Got same boiler"<<std::endl;

    else

        std::cout<<"Got different boler"<<std::endl;



    return 0;

}


 

测试结果如下:

Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

原创转载注明出处

 

你可能感兴趣的:(Singleton)