赞
踩
观察者模式指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式。
中介者模式是N对N的双向关系。观察者模式是1对N的单向关系。
设计模式,一定要敲代码理解
/**
* @author ggbond
* @date 2024年04月15日 10:04
*/
public interface Theme {
// 添加观察者(订阅者)
public void attach(Subscribe s);
// 删除观察者(订阅者)
public void detach(Subscribe s);
// 通知所有观察者(订阅者)
public void notifySubscriber();
}
/** * @author ggbond * @date 2024年04月15日 10:06 */ public class Publisher implements Theme{ private List<Subscribe> list=new ArrayList<>(); @Override public void attach(Subscribe s) { list.add(s); } @Override public void detach(Subscribe s) { list.remove(s); } //通知所有订阅者 @Override public void notifySubscriber() { System.out.println("@全体人员,今晚有个party,地点在望子成龙小学"); for (Subscribe o : list) { o.getinfo(); } } }
public interface Subscribe {
void getinfo();
}
/** * @author ggbond * @date 2024年04月15日 10:11 */ public class Subscriber implements Subscribe{ private String name; public Subscriber(String name) { this.name = name; } public String getName() { return name; } @Override public void getinfo() { System.out.println(name+":收到最新信息"); } }
/** * @author ggbond * @date 2024年04月15日 10:14 */ public class Main { public static void main(String[] args) { //发布者 Publisher publisher=new Publisher(); //订阅者 Subscribe s1=new Subscriber("ggbond1"); Subscribe s2=new Subscriber("ggbond2"); Subscribe s3=new Subscriber("ggbond3"); //订阅者订阅主题 publisher.attach(s1); publisher.attach(s2); publisher.attach(s3); //通知 publisher.notifySubscriber(); } }
@全体人员,今晚有个party,地点在望子成龙小学
ggbond1:收到最新信息
ggbond2:收到最新信息
ggbond3:收到最新信息
关系为1对N,对满足开闭原则。 无需修改发布者代码就能引入新的订阅者类
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。