用专业的话来说,是这样的:观察者模式定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
用我自己的话说是这样的:法外狂徒张三欠了一屁股债,追债人不知道张三什么时候有钱还。但是张三是个很守信用的人,他一有了钱就会去通知追债人去还债。
即张三状态发生变化,相关的依赖对象(追债人)皆会被通知,并且更新~
上代码:
/** * @Author:Nyapii */ public class ObserverPattern { public static void main(String[] args) { Debit zhangSan = new ZhangSan(); zhangSan.borrow(new Wangwu()); zhangSan.borrow(new Lisi()); zhangSan.notifyCredits(); } } interface Debit{ void borrow(Credit credit); void notifyCredits(); } class ZhangSan implements Debit{ private List<Credit> allCredits = new ArrayList<>(); private Integer state = 0; // 0表示没钱,1表示有钱 @Override public void borrow(Credit credit) { allCredits.add(credit); } @Override public void notifyCredits() { allCredits.forEach(credit -> credit.takeMoney()); } } interface Credit{ void takeMoney(); } class Lisi implements Credit{ @Override public void takeMoney() { System.out.println("李四要钱!"); } } class Wangwu implements Credit{ @Override public void takeMoney() { System.out.println("王五要钱!"); } }
/** * @Author:Nyapii */ public class ObserverPattern { public static void main(String[] args) { Debit zhangSan = new ZhangSan(); zhangSan.borrow(new Wangwu()); zhangSan.borrow(new Lisi()); zhangSan.notifyCredits(); } } interface Debit{ void borrow(Credit credit); void notifyCredits(); } class ZhangSan implements Debit{ private List<Credit> allCredits = new ArrayList<>(); private Integer state = 0; // 0表示没钱,1表示有钱 @Override public void borrow(Credit credit) { allCredits.add(credit); } @Override public void notifyCredits() { allCredits.forEach(credit -> credit.takeMoney()); } } interface Credit{ void takeMoney(); } class Lisi implements Credit{ @Override public void takeMoney() { System.out.println("李四要钱!"); } } class Wangwu implements Credit{ @Override public void takeMoney() { System.out.println("王五要钱!"); } }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构