观察者模式- 2020-11-24 23:08- 设计模式: 设计模式,观察者模式
意在指一对多的关系,即一个目标对多个观察者,多个观察者观察同一个目标,当目标发生改变时,观察者会感知到并且做出相应的处理。 通常observer,event,监听,发布订阅等,都属于观察者模式的实现。
event
监听类
import com.google.common.eventbus.Subscribe;/*** 事件监听** @author Bai* @date 2020/11/24 22:06*/public class GuavaEvent {@Subscribepublic void event(String event) {System.out.println("执行了" + event);}}
被监听类
import com.google.common.eventbus.EventBus;/*** 被监听类** @author Bai* @date 2020/11/24 23:13*/public class GuavaEventBus extends EventBus {}
测试
@Testpublic void test() {GuavaEventBus eventBus = new GuavaEventBus();GuavaEvent event = new GuavaEvent();eventBus.register(event);eventBus.post("监听");}
observer
观察者
import java.util.Observable;import java.util.Observer;/*** 猫 观察者** @author Bai* @date 2020/11/24 22:41*/public class Cat implements Observer {@Overridepublic void update(Observable o, Object arg) {CatFoodBowl catFoodBowl = (CatFoodBowl) o;Integer food = (Integer) arg;System.out.println("在" + catFoodBowl.getName() + "加了" + food + "猫粮后,猫开始吃猫粮了");}}
被观察者
import java.util.Observable;/*** 猫粮盆 被观察者** @author Bai* @date 2020/11/24 22:38*/public class CatFoodBowl extends Observable {private String name;private Integer food;public void addFood(String name, Integer food) {this.name = name;System.out.println(name + "加了" + food + "盆猫粮 ");//false 修改为 true 预示着有变化setChanged();//通知所有观察者notifyObservers(food);}public String getName() {return name;}public void setName(String name) {this.name = name;}}
测试
@Testpublic void test() {CatFoodBowl catFoodBowl = new CatFoodBowl();Cat cat = new Cat();catFoodBowl.addObserver(cat);catFoodBowl.addFood("主人", 1);}
主人加了1盆猫粮在主人加了1猫粮后,猫开始吃猫粮了
