#pragma once

#include <mutex>
#include "Frame.h"


class FrameFactory
{
public:
    static FrameFactory * GetInstance() {
        if(!m_pInstance)
        {
            m_mutex.lock();
            if(!m_pInstance)
            {
                m_pInstance = new FrameFactory();
            }
            m_mutex.unlock();
        }
        return m_pInstance;
    }

    // 根据设备类型建造不同的设备
    static Frame *createFrame(int type, int direct);

private:
    FrameFactory(){};

private:
    static FrameFactory *m_pInstance;
    static std::mutex m_mutex;

private:
    // 垃圾回收类,它的唯一工作就是在析构函数中删除DeviceFactory的实例
    class Garbo
    {
    public:
        ~Garbo()
        {
            if (FrameFactory::m_pInstance)
            {
                delete FrameFactory::m_pInstance;
            }
        }
    };
    // 定义一个静态成员,在程序结束时,系统会调用它的析构函数
    static Garbo m_Garbo;
};