Observer 设计模式可以用来解决您的问题。在观察者模式中,有两种不同类型的对象:
-
Observer 对象是希望在 Observable 对象发生变化时得到通知的对象。
-
Observable 对象是观察者可以观察到的对象
观察者注册到他们希望观察的Observable对象。每当 Observable 对象发生变化时,它都会通知所有已向其注册的 Observers。
根据您的代码示例,我将假设您使用的是 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();
}
}
这种方法有很多缺点:
- Observers 可以注册到任何 Observable 对象。您可能希望您的观察者只能观察
mammals。另一方面,您可能希望只有某些类型的观察者能够观察mammal。
- 您的
Observer 真的没有任何方法可以知道mammal 的具体变化
如果这些缺点中的任何一个对您来说是个问题,那么您可能希望避免使用 Observer 和 Observable 并考虑修改您现有的类(mammal 以及您的 Observers 是什么)以实现自己的,特定于应用程序的方法。