观察者模式是一种行为设计模式,它允许在对象之间定义一对多的依赖关系,当一个对象状态发生改变时,所有依赖它的对象都会得到通知并自动更新。在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