我想在语言依赖的情况下,你可能会有一些对象被更新。
我会建议一个架构,其中所有语言依赖对象继承一些基类(由您来看简单继承是足够的还是多个继承是必要的)。然后,虚拟功能将允许在必要时进行量身定制的语言操作。
基类将维护创建和删除的所有对象的列表,并提供更新语言的刷新机制。喜欢的东西:
class LSensitive {
private:
static list<LSensitive*> l; // all language dependent objects
protected:
virtual void doChangeLanguage(string new_language) = 0;
/* derived class change labels, units, etc... */
public:
static void changeAll(string new_language) // call this when you want to change !
{ for (auto i = l.begin(); i != l.end(); i++)
(*i)->doChangeLanguage(new_language);
}
LSensitive()
{ l.push_front(this); }
virtual ~LSensitive()
{ l.remove(this); }
};
派生类会再量身定做更改语言代码喜欢这里:
class Class0 : public LSensitive {
private:
static int unique_id;
int myid;
public:
Class0() : myid(unique_id++) {};
~Class0() {};
void doChangeLanguage(string new_language) // implement the class specific change
{ cout << "Object " << myid << ": change language to " << new_language << endl; };
};
当CLASS3或任何其他地方你注意到,它的时间来改变语言,然后只需拨打:
LSensitive::changeAll(new_language);
最大的优点是,无论您创建或初始化语言相关对象,此代码都会找到并更新它们。
观察Observer模式。 – jready
除了设计模式等你需要的是'Object3'有一个引用或指针'ObjectA'。因此,当通过'Object3'完成语言改变时'ObjectA'通过这个参考/指针被更新。 – 101010