Observer設計パターンを使用して、問題を解決できる可能性があります。オブザーバー パターンには、2 つの異なるタイプのオブジェクトがあります。
- オブザーバーオブジェクトは、Observable オブジェクトが変更されるたびに通知が必要なオブジェクトです。
- 監視可能なオブジェクトは、オブザーバーが監視できるオブジェクトです
オブザーバーは、監視したいObservableオブジェクトに登録されます。Observableオブジェクトが変更されるたびに、登録されているすべてのオブザーバーに通知されます。
コード例に基づいて、Java を使用していると仮定します。その場合、ObserverとObservableを使用して、既存のコードに加えなければならない変更の数を減らすことができます。
public class mammal extends java.util.Observable implements Imammle
{
public String getName() {
return "Mammal";
}
public String speak() {
setChanged(); // We have been changed
notifyObservers(); // Notify everyone that we have changed
return getName() + "Maaaauuu";
}
}
次に、何かが変更されたときに監視するクラスを作成します。
public class Watcher implements java.util.Observer
{
public void update(Observable o, Object arg) {
System.out.println("Something has changed");
}
}
最後に、ウォッチャーを に登録して、ウォッチャーmammal
が変更されるたびに通知できるようにします。
public class Main
{
public static void main(String args[]) {
mammal cow = new mammal();
Watcher farmer = new Watcher();
cow.addObserver(farmer);
cow.speak();
}
}
このアプローチにはいくつかの欠点があります。
- オブザーバーは、任意の Observable オブジェクトに登録できます。Observer が s のみを観察できるようにしたい場合があります
mammal
。反対に、特定の種類のオブザーバーのみがmammal
.
- なし
Observer
で正確に何が変わったのかを知る方法は本当にありませんmammal
これらの欠点のいずれかが問題になる場合は、回避Observer
しObservable
、既存のクラス (mammal
およびそれが何であれObservers
) を変更して、独自のアプリケーション固有のメソッドを実装することを検討してください。