假设我有一个具有2种模式的对象,则每种模式都有其相应的动作:
模式1:
Do1()
Do2()
模式2:
Do1()
Do2()
Do3()
注意:模式1和模式2的Do1()和Do2()相似。
我想到了状态和策略模式,但是在这种情况下它们不合适。这种情况下,不需要虚拟方法,只需继承即可。但是如何更改模式,它将了解相应的方法?
在这种情况下哪种设计模式合适?
更新1:
我将进一步说明这个问题,让它更加清楚。
// Object class
class Object
{
public:
// Assume [mode] is enum type, and
// there are 2 values: M1, M2
mode: CMode;
}
M1的方法
void Do1();
void Do2();
M2的方法
void Do1();
void Do2();
void Do3();
我正在研究如何设计可以使用如下对象的类图:
CObject* object;
// The object is in mode 1 (M1).
object.mode = M1;
// On mode 1 (M1), only execute 2 methods.
object -> Do1();
object -> Do2();
// The object is in mode 2 (M2).
object.mode = M2;
// On mode 2 (M2), can execute 2 methods of mode 1 (M1),
// and another methods.
object -> Do1();
object -> Do2();
object -> Do3();
我希望设计一个类结构来做到这一点,而不是像以前那样使用“ if”或“ switch-case”。