私は抽象クラスを持っています:
public abstract class AbstractCommand {
private static State state;
}
目的
- クラスのオブジェクトは
State
、いくつかの「制御クラス」によって提供され、各AbstractCommand
サブクラスが必要とするデータを提供します - 各サブクラスには読み取りアクセスが必要です
- サブクラスはフィールドを変更できません
現在のアプローチ
state
サブクラス (コマンドを定義する) がフィールドを使用できるように (読み取り専用)、プログラムの「制御クラス」によってフィールドを初期化する必要があります。サブクラスは内部で定義されており、ユーザーのインターフェースとして使用する必要があります。このユーザーには、 への書き込みアクセス権はありませんstate
。
問題
- public
setState()
メソッドを追加するAbstractCommand
と、すべてのサブクラスがアクセスできるようになり、ユーザーもアクセスできるようになります - フィールドを final にすると、オブジェクトの作成が抽象クラスで強制的に行われ、「制御クラス」はこのオブジェクトを使用する必要があり、さらに置き換えられません。
このようなものをどのように処理しますか?
別の試み
一部の回答はパッケージの可視性を使用したソリューションを提案しているため、これがうまくいくかどうか疑問に思います:
「制御クラス」(パッケージの外部から) からの呼び出しを抽象クラスに委譲することによって、必要な情報を提供するクラスを同じパッケージ内に配置します。
少しあいまいに聞こえますが、どう思いますか?