了解观察者模式
定义
观察者模式(Observer Pattern)。定义对象间的一种一对多的依赖关系
,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
举例
张三欠了很多人钱,债主每天来要钱对谁都不好。于是就可以让张三有钱时主动通知债主,没钱时就让债主等着(债主就是观察者,观察张三有没有钱)。于是观察者模式又叫发布者模式
。
图例
代码
import java.util.ArrayList;
import java.util.List;
// 观察者模式
public class ObserverPattern {
public static void main(String[] args) {
// 张三为借钱者
Debit zhangSan = new DebitImpl();
// 向老板借钱
zhangSan.borrow(new Boss());
// 向朋友借钱
zhangSan.borrow(new Friend());
// 自行改变判断state为true时(有钱后)通知还钱
zhangSan.notifyCreadits();
}
}
// 借贷者接口
interface Debit{
// 向贷款方借钱
void borrow(Credit credit);
// 通知债主自己要还钱
void notifyCreadits();
}
// 贷款者
class DebitImpl implements Debit{
// 创建一个数据结构存放这些债主
private List<Credit> allCredits = new ArrayList<>();
// 当为true时表示有钱,可以通知还钱
private boolean state = false;
@Override
public void borrow(Credit credit) {
// 每借一个人的钱就把这个人存到集合中去
allCredits.add(credit);
System.out.println("张三借钱!");
}
@Override
public void notifyCreadits() {
// 还钱时直接遍历集合通知还钱
allCredits.forEach(credit -> credit.takeMoney());
}
}
// 贷款方(债主)接口
interface Credit{
// 债主要钱
void takeMoney();
}
class Boss implements Credit{
@Override
public void takeMoney() {
System.out.println("Boss得到偿还");
}
}
class Friend implements Credit{
@Override
public void takeMoney() {
System.out.println("Friend得到偿还");
}
}
类图
观察者模式应用
情景使用——天气预报
描述:气象站想要把自己测量的温度、湿度、天气等信息以公告形式发布出去(如:自己的官网或QQ、微信等第三方),那么他就需要设计开放型的的API(提供温度、湿度、气压等接口),便于其他第三方也能接入气象站获取数据。测量数据更新时要能实时的通知给第三方。