单例模式

Service Locator

这实际上是属于一种全局获取依赖对象的设计模式,可以理解为“我不通过构造函数传进来,而是到一个全局注册中心里去拿对象。”

Meyer’s Singleton

经典代码:

class StreamManager {
public:
    static StreamManager& instance()
    {
        static StreamManager obj;
        return obj;
    }

private:
    StreamManager() {}
};
//使用
CmsStreamManager::instance().start();

缺点

隐式依赖

RecordController(controller)
//它内部还依赖:
CmsStreamManager::instance()

生命周期不可控

谁创建? 谁销毁? 什么时候初始化?全隐藏。

多线程 shutdown 麻烦