delphi - 对象模式动作的设计模式
问题描述
假设我有一个具有 2 模式的对象,每个模式都有其相应的操作:
模式一:
做1()
做2()
模式二:
做1()
做2()
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”。
解决方案
推荐阅读
- symfony - Symfony 4 投票者 - OnetoMany 关系
- algorithm - 查找图中所有节点的算法设计
- opencl - “clRetainKernel”函数的目的是什么?
- html - 调用时不弹出模态框
- tensorflow2.0 - 在tensforflow2中重新初始化某些层的权重的正确方法是什么?
- java - 整数输入 if while cond 在java中为假
- python - 如何在python上通过PUT上传文件而不打开文件
- django - Django API 查询
- java - 如何解决此错误:“无法在原始类型 char 上调用 getFirst()”?
- ionic3 - 如何使用 ionic 3 提高 PWA (Progressive Web App) 中的页面速度