【发布时间】:2017-12-22 03:41:30
【问题描述】:
我的控制器违反了开闭原则。我试图弄清楚如何在某些条件下解决这个问题。这是实现。
struct BasicRecording
{
void show() {}
void hide() {}
};
struct AdvanceRecording
{
void show() {}
void hide() {}
};
class NotSolidRecordingSettingsController
{
BasicRecording br;
AdvanceRecording ar;
public:
void swithToAR();
void swithToBR();
};
void NotSolidRecordingSettingsController::swithToAR()
{
br.hide();
ar.show();
};
void NotSolidRecordingSettingsController::swithToBR()
{
ar.hide();
br.show();
};
这里的问题是,如果我有新的录制设置,我需要返回设置控制器并添加新的录制设置。如果我在 NotSolidRecordingSettingsController 中注入 BasicRecording 和 AdvanceRecording,那么实例化 NotSolidRecordingSettingsController 的对象将需要对 BasicRecording 和 AdvanceRecording 进行实例化。但随后该对象违反了 OCP。必须有人创建对象。
如何在不将 Not OCP 部分加载到其他东西的情况下将其设计为 OCP?
这类问题有特定的设计模式吗?
【问题讨论】:
-
在控制器类上使用公共方法的类是什么样子的?
标签: c++11 solid-principles open-closed-principle