观察者模式:观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
参考:https://www.cnblogs.com/V1haoge/p/6513651.html
代码实现
观察者接口
public interface Observer {
public void update(String message,String name);}
定义三名便衣
public class Bianyi1 implements Observer{
private String name = "石破天";
@Override
public void update(String message, String name) {
System.out.println(this.name+":"+name+"那里有新情况:"+ message);
}}
public class Bianyi2 implements Observer {
private String name = "赵日天";@Override
public void update(String message, String name) {
System.out.println(this.name+":"+name+"那里有新情况:"+ message);}
}
public class Bianyi3 implements Observer{
private String name = "张昊天";@Override
public void update(String message, String name) {
System.out.println(this.name+":"+name+"那里有新情况:"+ message);
}}
目标接口:
public interface Beiguancha {
public void addObserver(Observer obser);
public void notice(String message);}
两个嫌疑犯
public class Xianfan1 implements Beiguancha {
private String name = "大熊";
List<Observer> list = new ArrayList<>();
//添加观察者
@Override
public void addObserver(Observer obser) {
if(!list.contains(obser)){
list.add(obser);
}}
//订阅
@Override
public void notice(String message) {
for (Observer observer : list) {
observer.update(message, name);
}}
}
public class XIanfan2 implements Beiguancha{
private String name = "二狗";List<Observer> list = new ArrayList<>();
//添加观察者
@Override
public void addObserver(Observer obser) {
if(!list.contains(obser)){
list.add(obser);
}}
//通知观察者
@Override
public void notice(String message) {
for (Observer observer : list) {
observer.update(message, name);
}}
}
运行结果:
关键点
1,定义观察者接口,定义观察者在发现被观察者变化后,要做的事情。
2,在被观察者中 首先要定义注册观察者的方法,其次要定义通知方法,用于将更新情况通知给观察者。
3,观察者中要有个接受被观察者通知的方法。