- 定义
- 结构图
- 使用场景
- 代码实现
- Java代码实现
- python代码实现
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
结构图 使用场景用于GUI的监听事件
用于支付的更新订单状态,发送邮件通知等等
可以说在对象之间的消息响应都是可以使用
创建两个接口文件
1.Subject接口
public interface Subject{
public void addObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObserver(Observer o);
}
2.Observer接口
public interface Observer{
public void update(String msg);
public void dispaly();
}
创建两个接口实现
1.Subjectimpl
import java.util*;
import Observer;
public class Subjectimpl implements Subject{
private ArrayList Observers; //用来存放观察者
private String msg; //消息
//构造方法
//类创建时,创建一个数组
public Subjectimpl(){
Observer = new ArrayList();
}
//添加观察者
@Override
public void addObserver(Observer o){
Observers.add(o);
}
//删除观察者
@Override
public void removeObserver(Observer o){
Observers.remove(o);
}
//通知观察者
@Override
public void notifyObserver(String msg){
this.msg = msg;
for(Observer o: Observers){
o.update(msg)
}
}
}
2.Observerimpl
import Subject;
public class Observerimpl implements Observer{
private String msg;
private Subject subject;
//构造方法
//类创建的同时,注册主题(也就是被观察者)
public Observerimpl(Subject subject){
this.subject = subject;
subject.add(this); //添加本身
}
//更新数据
@Override
public void update(String msg){
this.msg = msg;
dispaly();
}
//显示数据
@Override
public void dispaly(){
System.out.println(msg);
}
}
运行文件:
import Subjectimpl;
import Observerimpl;
import Observer;
import Subject;
public class run{
public static void main(String[] args){
Subject subject = new Subjectimpl();
Observer observer = new Observerimpl(subject);
String msg = "Hello work!"
subject.notifyObserver(msg);
}
}
运行结果:Hello work!
python代码实现实现两个类
1.Suject类
class Subject:
def __init__(self):
self.Observers = []
self.msg = 'fff'
def addObserver(self,o):
self.Observers.append(o)
def removeObserver(self,o):
self.Observers.remove(o)
def notifyObserver(self):
for o in self.Observers:
o.update(self.msg)
2.Observer类
class Observer:
def __init__(self,subject):
subject.addObserver(self)
self.msg = ''
def update(self,msg):
self.msg = msg
self.dispaly()
def dispaly(self):
print(self.msg)
运行文件
subject = Subject() observer = Observer(subject) subject.notifyObserver()
运行结果:fff



