複数の被験者と複数のオブザーバーが存在するパターンの設計に取り組んでいます。各オブザーバーは、出力を生成するために知る必要があることを知っているため、コンストラクターで必要なサブジェクトに自分自身を登録します。私が最初に考えたのは、サブジェクトをシングルトン クラスにすることでしたが、それには、各サブジェクトを個別にシングルトンにするか、abstract static
Java がサポートしていないクラスにする必要があることがわかりました。要するに、私は最善の解決策が実際に何であるかを理解しようとしています. それが本当に明確であることを確認するために、ここに私がやろうとしていることがあります:
- 複数科目になります。各オブザーバーは、複数の対象を観察することができます。これを機能させるために、オブザーバーに対してそれ自体を識別するように、各サブジェクトにリソース コードを用意します (`update(SUBJECT_1) ここで、SUBJECT_1 はサブジェクト 1 に対応する int です)。
- 各オブザーバーは、建設時に観察したい対象を知っています。
- 作成された各サブジェクトの単一のインスタンスのみが必要です。
- 一部のオブザーバーは、今度は被験者自身になる可能性があります。
- 一般に、フロー パターンがあります。最終的には、より抽象的な概念を作成するいくつかの入力ソースがあります。オブザーバー/サブジェクトのフロー図は次のようになります。
これにはまったく別のデザイン パターンが必要になるかもしれないと考えていますが、一般的なデザイン パターンにはまだかなり慣れていないので、飛び込む前にもう少し経験を積んでおこうと思いました。ありがとう!
明確にするために、シングルトンは次のように機能します。つまり、すべてのサブジェクトがシングルトンであるabstractSubjectが必要です。それぞれを単独でシングルトンにすることもできますが、この疑似コードのような getInstance を使用するように強制することをお勧めします。
abstract class abstractSubject{
AbstractSubject instance=null;
public static AbstractSubject getInstance()
{
if (instance==null)
instance=new AbstractInstance();
return instance;
}
abstract void attach();
//More stuff will go here to make it a subject
}
//Define Subject1, Subject2 classes fully
class Observer1 extends AbstractObserver{
public Observer1()
{
Subject1.getInstance().attach(this);
Subject2.getInstance().attach(this);
}
//Other stuff goes here to make it an observer
}