私はGameControllerでしか変更できないクラスを作成しようとしていますが、どのクラスでもアクセス可能です。これを達成するために私はどのようなデザインパターンを研究すべきですか?OODのデザインパターンは何ですか?
*私はこれをJavaでビルドしています。GameControllerは私のメインクラスです。だから、私はGameControllerクラスでプライベートインスタンスを作成することはできません。それが簡単なことを願っています。
私はGameControllerでしか変更できないクラスを作成しようとしていますが、どのクラスでもアクセス可能です。これを達成するために私はどのようなデザインパターンを研究すべきですか?OODのデザインパターンは何ですか?
*私はこれをJavaでビルドしています。GameControllerは私のメインクラスです。だから、私はGameControllerクラスでプライベートインスタンスを作成することはできません。それが簡単なことを願っています。
「デザインパターン」はありません。代わりに、public
ゲッターを提供するだけでパッケージ - プライベートセッターまたは他のミューテータメソッド(GameController
によって使用されるクラスが同じパッケージ内にあると仮定して)を提供することによって、Javaのアクセス修飾子を使用します。
トップレベルが読み取り専用で、次のレベルがセッターを追加するインターフェイス階層を作成できます。 このクラスは、読み書きインタフェースを実装しています。 コントローラは、書き込み可能なインタフェースを持つインスタンスを取得します。他のすべてのインタフェースは、読み取り専用インタフェースでクラス分けされています。
どのクラスにもアクセスできますか? ここで実装しようとしているのは、すべてのクラスがコントローラクラスの同じインスタンスにアクセスして共有していると思います。あなたはすべてのフィールドがあるので、上記のクラスにインスタンスを作成する心配する必要はいけない
public class getGame{
private static GameController gameController;
public static GameController getController(){
if(gameController==null){
gameController = new GameController();
}
return gameController;
}
}
あなたは、MVCパターンで行くことができますが、あなたは遅すぎることのためであり、同じインスタンスを共有するために何らかの形で必要な場合は、単一のパターンで行くことができます静的としてマークされています。
getterのみ作成し、setterは作成せず、つまり読み取り専用にします。これは**カプセル化**であり、パターンではありません。 –
私が考えることができる明らかな解決策は、あなたがアクセス可能にしたい動作を定義しているインターフェースまたは抽象クラスを持つことです。そして、そのインターフェースを実装する 'GameController'のプライベートクラスを持ってください。 – Dolda2000
@ChrisWohlert、gettersはプロパティを変更できないようにしません。プロパティの種類によっては、防御的なコピーを作成する必要があるかもしれません。 –