观察者模式:如果一个对象(被观察者)状态改变时需要去通知其他对象(观察者)进行一些操作,此时可以使用观察者模式。
其实质还是通过观察者调用本身的方法进行操作。
示例说明:班长告诉学生老师来了。被观察者:班长,观察者:学生
被观察者:
package com.zpj.designMode.observerPattern; import java.util.ArrayList; import java.util.List; public class Monitor { private List<Observer> obers = new ArrayList<Observer>(); public void notifyStudent() { for (Observer ob : obers) { ob.teacherIsComming(); } } public void addObserver(Observer ob) { if (ob != null) obers.add(ob); } public void removeObserver(Observer ob) { if (ob != null) obers.remove(ob); } }
定义观察者接口:
package com.zpj.designMode.observerPattern; public interface Observer { public void teacherIsComming(); }
观察者实现类:
package com.zpj.designMode.observerPattern; public class Student01 implements Observer { @Override public void teacherIsComming() { System.out.println("--------student01 reading"); } } package com.zpj.designMode.observerPattern; public class Student02 implements Observer { @Override public void teacherIsComming() { System.out.println("--------student01 reading"); } } package com.zpj.designMode.observerPattern; public class Student03 implements Observer { @Override public void teacherIsComming() { System.out.println("--------student01 reading"); } }
测试类:
package com.zpj.designMode.observerPattern; import org.junit.Test; public class TestUtil { @Test public void test01() { Monitor mo = new Monitor(); Observer s1 = new Student01(); Observer s2 = new Student02(); Observer s3 = new Student03(); mo.addObserver(s3); mo.addObserver(s2); mo.addObserver(s1); mo.notifyStudent(); } // java 的观察者模式 @Test public void test02() { Monitor02 mo02 = new Monitor02(); java.util.Observer student04 = new Student04(); mo02.addObserver(student04); mo02.teacherIsComming(); } }
java中是定义的有观察者接口和被观察者抽象类的
package com.zpj.designMode.observerPattern; import java.util.Observable; public class Student04 implements java.util.Observer { // 实现update抽象方法,在被观察者发生变化之后又在该方法中进行操作 @Override public void update(Observable o, Object arg) { System.out.println("------------student04- -----------" + arg); } }
package com.zpj.designMode.observerPattern; public class Monitor02 extends java.util.Observable { public void teacherIsComming() { // 设置changed = true,因为当changed== ture的时候才会调用观察者的update()方法。 setChanged(); // 通知观察者被观察者发生改变 notifyObservers("teacher is comming !!!!"); ; } }
测试方法见test02()。
参考链接:观察者模式
------------------------
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!