观察者模式
使用场景:一对多的关联关系,需要一套触发机制。
模式类型:观察者模式
优点:
观察者与被观察者之间建立抽象的耦合,降低耦合。
观察者模式支持广播通信。
缺点:
观察者之间依赖较多,比较复杂。
- 观察者接口
/**
* @author admin
*/
public interface IObserver {
/**
* 前置操作
*/
void before();
/**
* 跟新操作
*/
void update();
/**
* 后置操作
*/
void after();
}
- 观察者实现
/**
* @author admin
*/
public class FirstObserver implements IObserver {
@Override
public void before() {
System.out.println("FirstObserver is doing before action.");
}
@Override
public void update() {
before();
System.out.println("FirstObserver is updating.");
after();
}
@Override
public void after() {
System.out.println("FirstObserver is doing after action.");
}
}
- 被观察者接口
/**
* @author admin
*/
public interface ISubject {
/**
* 增加观察者
*
* @param observer 观察者
* @return 是否成功
*/
boolean addObserver(IObserver observer);
/**
* 移除观察者
*
* @param observer 观察者
* @return 是否成功
*/
boolean removeObserver(IObserver observer);
/**
* 通知所有观察者
*/
void notifyAllObservers();
}
- 被观察者具体实现
/**
* 具体主题
*/
public class ConcreteSubject implements ISubject {
List<IObserver> list = new ArrayList<>();
@Override
public boolean addObserver(IObserver observer) {
list.add(observer);
return true;
}
@Override
public boolean removeObserver(IObserver observer) {
list.remove(observer);
return true;
}
@Override
public void notifyAllObservers() {
for (IObserver observer : list) {
observer.update();
}
}
}
- 客户端
/**
* @author admin
*/
public class Client {
public static void main(String[] args) {
ConcreteSubject concreteSubject = new ConcreteSubject();
concreteSubject.addObserver(new FirstObserver());
concreteSubject.notifyAllObservers();
}
}
- 执行结果
标签:observer,void,观察者,模式,public,IObserver,FirstObserver From: https://www.cnblogs.com/kouhao/p/17500914.htmlFirstObserver is doing before action.
FirstObserver is updating.
FirstObserver is doing after action.