设计模式之 — 观察者模式
1.观察者模式的基本构成:
观察者模式一般有四个部分组成:
(1).Subjcet —被观察者接口父类
(2).CSubject—具体被观察者 ---- (被观察者具体实现)
(3).Observer—观察者接口父类
(4).CObserver—具体观察者 ---- (观察者具体实现)
其中:被观察者的主要方法有: 增加,删除,通知
----------观察者的方法有: 更新
以下是java 实现观察者模式的demo;
1.被观察者接口父类:
/**
* 被观察者父类(含有三个方法:1.增加 2.删除 3.通知观察者)
*/
public interface Subject {
void addObserver(Observer observer);
void deleteObserver(Observer observer);
void notifyObserver();
}
2.具体被观察者,自身有个表演的动作:setAction
/**
* 具体被观察者(具体实现)
*/
public class CSubject implements Subject {
private List<Observer> observers = new ArrayList<>();
@Override
public void addObserver(Observer observer) {
observers.add(observer);
}
@Override
public void deleteObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObserver() {
//通知就是遍历一下观察者们,调用观察者的update就可以:
for (Observer observer:observers){
observer.update(action);
}
}
//表演内容
private String action;
public void setAction(String action) {
this.action = action;
}
}
3.观察者接口父类
/**
* 观察者模式 - 观察者接口父类
*/
public interface Observer {
void update(Object o);
}
4.具体观察者
public class C1Observer implements Observer{
//观察者1---实时观察
@Override
public void update(Object o) {
System.out.println(this.getClass().toString()+"观察到-->"+o.toString());
}
}
public class C2Observer implements Observer {
//观察者2---实时观察
@Override
public void update(Object o) {
System.out.println(this.getClass().toString() + "观察到-->"+o.toString());
}
}
5.运行结果:
public class ObserverTest {
public static void main(String[] args) {
//创建观察者:
Observer observer1 = new C1Observer();
Observer observer2 = new C2Observer();
//创建被观察者:
CSubject subject = new CSubject();
//被观察者 添加 观察者
subject.addObserver(observer1);
subject.addObserver(observer2);
//被观察者开始表演
subject.setAction("我表演了");
subject.notifyObserver();
}
}
- class com.example.myapplication.observer.C1Observer观察到–>我表演了
class com.example.myapplication.observer.C2Observer观察到–>我表演了