一 观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。
主要解决: 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
关键代码: 在类里有一个 ArrayList 存放观察者们。
使用场景:一个女孩有三个男朋友,女孩的喜怒哀乐,男朋友们都知道。:(
类图:
二 实现代码
1 创建抽象观察者
Observer.java
package com.test.observer; public abstract class Observer { }
2 具体观察者
ConcreteObserver.java
package com.test.observer; public class ConcreteObserver extends Observer { public void update(Object object) { System.out.println("观察者更新自己,得到参数=" + object); } }
3 创建接口主题
Subject.java
package com.test.observer; public interface Subject { public void attach(Observer observer); public void detach(Observer observer); public void notifyObservers(); }
4 创建具体主题
ConcreteSubject.java
package com.test.observer; import java.util.ArrayList; import java.util.List; public class ConcreteSubject implements Subject { List<Observer> list = new ArrayList<Observer>(); public void attach(Observer observer) { this.list.add(observer); } public void detach(Observer observer) { this.list.remove(observer); } public void notifyObservers() { for (Observer observer : list) { observer.update("通知观察者!"); } } public void runObservers() { this.notifyObservers(); } }
5 运行测试类
RunObserverDemo.java
package com.test.observer; public class RunObserverDemo { public static void main(String[] args) { ConcreteSubject subject = new ConcreteSubject(); ConcreteObserver o1 = new ConcreteObserver(); ConcreteObserver o2 = new ConcreteObserver(); ConcreteObserver o3 = new ConcreteObserver(); subject.attach(o1); subject.attach(o2); subject.attach(o3); subject.runObservers(); System.out.println("----------------"); subject.detach(o1); subject.runObservers(); } }
时间: 2024-10-13 21:00:44