在我的基础框架中,我喜欢拥有可以在多个项目中重用的类。大多数情况下这些都是通用的以允许灵活性。
我有一个小小的标题,用于存储数据并轻松获取数据。
#pragma once
#include <map>
#include <string>
namespace BaseFrameWork
{
template<class TValue, class TKey = std::string>
class Provider
{
public:
static TValue& Get(TKey const& key);
private:
static std::map<TKey, TValue> _dataMap;
};
}
是的,它只是地图的包装,但我喜欢它作为从中获取数据的中心位置。
例如,我可以Provider<Room>::Get("U-18")
来获取内部加载的对象。谁来关心来自哪里。
我承认拥有这样的全局对象是多么的不满,但这不是公共API的一部分,只能用于团队可以使用它的个人项目中。
我想知道的是这个模式是否有名称,如果它是一个名称。我总是将它称为Provider-Pattern,因为它的功能是什么,提供了东西,但我看到已经采用了它。
请不要告诉我这段代码有多糟糕以及我应该为它做些什么。
答案 0 :(得分:1)
它是一个单例模式,数据项为map
(当通过getter和大概设置器进行访问时,实际上是一个不透明的关联容器)。关联容器通常不被认为是设计模式本身。
如果你正在寻找一个能够简洁明了地传达这个设计的短语,那就像“Singleton地图初始化(何时/如何)和之后的只读”。
答案 1 :(得分:1)
好的,我和你班上的问题:
Get()
是否真的应该通过非const引用返回TValue
。这基本上使Get()
成为一个setter和getter。如果它通过std::map
的{{1}}实现,那么它将插入并创建默认构造的TValue,您可以愉快地分配或修改它。