我有
public class mammal implements Imammle
{
public String getName() {
return "Mammal";
}
public String speak() {
return getName() + "Maaaauuu";
}
}
我需要知道我的动物发出声音的时间,以便我能像吃饭一样实时采取相应的行动 我应该使用什么样的设计模式? 感谢。
答案 0 :(得分:5)
Observer设计模式可能用于解决您的问题。在观察者模式中,有两种不同类型的对象:
观察员已在他们希望观看的可观察对象中注册。每当可观察对象发生变化时,它都会通知所有已注册的观察者。
根据您的代码示例,我将假设您使用的是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();
}
}
这种方法有很多缺点:
mammal
。另一方面,您可能希望只有某些类型的观察者能够观察mammal
。mammal
没有改变的确切变化
mammal
使用notifyObservers(Object arg)方法向观察者传递某种消息mammal
如果这些缺点中的任何一个对您来说都是一个问题,那么您可能希望避免使用Observer和Observable并考虑修改现有的类(mammal
以及您的观察者是什么)来实现自己的应用程序具体方法。