它可能已经得到了解答,但是由于让我感到头痛而让我感到很困扰,这就是我要求解决方案或解释的原因。
问题在于我正在开发一个系统,我想在其中只有一个属性(在应用程序方面)struct或者可以从我的代码中的任何地方访问。 为了给你更大的计划,我希望在类对象中保存我的所有属性,让我们说属性。所以我决定选择Singleton。 关键是我希望派生对象的值和getter-setter方法来自基类Properties。 例如,我想让两个不同的类Component1Properties和Component2Properties说两个不同的对象。现在我希望我的属性单例创建一个Components1Properties对象和一个Component2Properties对象,这样每次我得到相同的实例我都会有相同的派生对象。 接下来让我们添加一个静态字符串" property"每个派生对象,并为此字符串声明一个getter和setter方法。
我面临的问题是我希望我的代码中的所有地方都能调用派生对象函数并获取和设置这些对象中的值 例: 在我的.h文件中:
class Properties
{
public:
static Properties& getInstance()
{
if instance==NULL} instance = new Properties();
return *instance;
}
private:
Properties();
static Properties* instance;
};
class Compoment1Properties : public Properties
{
public:
String property1;
void setProperty1(String value){
property1 = value;
}
String getValue(){
return property1
}
Component1Properties();
~Component1Properties(){};
};
然后在我的.cpp文件中
Properties::Properties()
{
Component1Properties component1Properties;
}
我希望代码中的任何地方都能够获取或设置Component1Properties的值,如下所示:
String value = Properties :: getInstance()。component1Properties.getValue(); 属性::的getInstance()component1Properties.setValue(值);
我的问题是 这有点可行吗? 2.根据我的需求,架构是否正确? 我做错了什么?
感谢您的理解和对不起,如果这是显而易见的事情,但实际上我正在尝试熟悉C ++中的OOP原则,但事情对我来说非常混乱,而且我只是头痛而不是结果
答案 0 :(得分:0)
你不能以你想要的方式直接工作,只是因为如果你想拥有两个对象Component1Properties
和Component2Properties
,两者都有{{ 1}}作为基类,那么你将拥有至少两个<{1}}类的副本:每个组件属性中有一个。这就是继承的工作方式,但这显然会破坏你的单身方法。
可以做的是让Properties
持有引用(或者,指针)到Properties
对象,以及同样适用于Component1Properties
。在这种情况下,可以在组件属性对象之间共享Properties
对象。
然后你可以让Component2Properties
对象为特定组件生成对象,最有可能是通过一些工厂模式,尽管我会为此建议一个单独的类,如Properties
。它可能也是一个单例,甚至可以包含在Properties
类中,但更好的可能是主PropertiesFactory
类,它是一个生成全局Properties
的工厂以及每个对象的属性
如果每个组件属性只是全局属性的子集,那么另一种方法可能是可行的。在这种情况下,您可以拥有单独的PropertiesManager
类和Properties
类来继承所有Component{1,2}Properties
:
Properties
在这种情况下,您可以将全局Properties对象强制转换为您需要的任何类。如果你的组件有一些共同的属性,你也可以尝试使用虚拟继承技巧,但总的来说这似乎太复杂且容易出错。
答案 1 :(得分:0)
基于注册表的单身人士