观察者模式是一种行为设计模式,它允许在对象之间定义一对多的依赖关系,当一个对象状态发生改变时,所有依赖它的对象都会得到通知并自动更新。在Java中,观察者模式被广泛地应用在各种场景中。
观察者模式包含以下角色:
观察者模式在Java中有很多应用场景,例如:
下面是一个简单的Java观察者模式的示例:
// Subject(被观察者)
public abstract class Subject {
private List<Observer> observers = new ArrayList<>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
// ConcreteSubject(具体被观察者)
public class ConcreteSubject extends Subject {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
notifyObservers();
}
}
// Observer(观察者)
public abstract class Observer {
public abstract void update();
}
// ConcreteObserver(具体观察者)
public class ConcreteObserver extends Observer {
private String name;
private ConcreteSubject subject;
public ConcreteObserver(String name, ConcreteSubject subject) {
this.name = name;
this.subject = subject;
}
public void update() {
System.out.println(name + " received update: " + subject.getState());
}
}
// 测试代码
public class Test {
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer1 = new ConcreteObserver("Observer1", subject);
ConcreteObserver observer2 = new ConcreteObserver("Observer2", subject);
subject.attach(observer1);
subject.attach(observer2);
subject.setState("New State");
subject.detach(observer2);
subject.setState("Another State");
}
}
在上面的示例中,Subject是被观察者的抽象类,ConcreteSubject是具体被观察者的实现类,Observer是观察者的抽象类,ConcreteObserver是具体观察者的实现类。在测试代码中,我们首先创建了一个ConcreteSubject对象和两个ConcreteObserver对象,然后将两个ConcreteObserver对象都注册到ConcreteSubject对象的观察者列表中。接着,我们设置ConcreteSubject对象的状态为“New State”,所有注册过的ConcreteObserver对象都会收到通知并进行相应的操作。最后,我们将其中一个ConcreteObserver对象从观察者列表中移除,并再次将ConcreteSubject对象的状态设置为“Another State”,只有一个ConcreteObserver对象会收到通知。
通过上面的示例,我们可以看到Java中观察者模式的具体实现,并且了解了观察者模式的一些基本概念和应用场景。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com
