OOP 設計に関する質問があります (私は Java を使用していますが、質問はより一般的です)。ホーム オートメーション シミュレーターをプログラミングしていますが、設計に問題があります。TelevisionやHeatingのように、 volumeUp()などの対応するメソッドを持つ各アプライアンスのクラスがあります...イベントを生成し、それらに対してアクションを実行するアプライアンスとセンサーのクラスを分離したいと思います。考えられることは次のとおりです。オブザーバー パターンを実装して、センサーからアラーム クラスにイベントを伝達します。アラーム クラスは次のようになります。
class Alarm implements Observer {
Action action;
public update(...) { action.do() }
}
ここで、ユーザーがユーザー インターフェイスでトリガーするセンサーとアクションを任意に結合できるようにしたいので、各アプライアンスのアクションごとに個別のクラスを作成することを考えました。
class ActionTVVolumeUp implements Action {
Television tv;
ActionTVVolumeUp(Television tv) { this.tv = tv; }
public void do() { tv.volumeUp() }
}
次に、ユーザーがユーザー インターフェイスでセンサー (MotionSensor、LightSensor、...) を指定し、トリガーするアクションを指定すると、目的のセンサーを監視する目的のアクションでアラーム インスタンスが作成されます。これに関する問題は、非常に多くのアクション クラスが必要になることです (アプライアンスが実装する VolumeControllable などのインターフェイスを使用して、アクション クラスを少し減らすことができます)。
私が欠けているものはありますか?これはより簡単に/多くの Action クラスを使用する必要なしに行うことができますか? ありがとうございました。