Java学习笔记——设计模式之十.观察者模式
2024-09-01 01:43:31
观察者模式(Observer),定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
Subject类:
package cn.happy.design_pattern._10publishsubscribe; import java.util.ArrayList;
import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<>(); public void attach(Observer observer){
observers.add(observer);
} public void detach(Observer observer){
observers.remove(observer);
} public void mNotify(){
for (Observer item : observers) {
item.update();
}
}
}
Observer类:
package cn.happy.design_pattern._10publishsubscribe; public abstract class Observer { public abstract void update();
}
ConcreteSubject类:
package cn.happy.design_pattern._10publishsubscribe; public class ConcreteSubject extends Subject { private String subjectState; String getSubjectState() {
return subjectState;
} void setSubjectState(String subjectState) {
this.subjectState = subjectState;
} }
ConcreteObserver类:
package cn.happy.design_pattern._10publishsubscribe; public class ConcreteObserver extends Observer { private String name;
private String observerState;
private ConcreteSubject subject; public ConcreteObserver(ConcreteSubject subject, String name) {
this.subject = subject;
this.name = name;
} @Override
public void update() {
observerState = subject.getSubjectState();
System.out.println("观察者"+name+"的新状态是"+observerState);
}
//省略getter and setter
}
测试类:
package cn.happy.design_pattern._10publishsubscribe; public class Mmain { public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
subject.attach(new ConcreteObserver(subject, "X"));
subject.attach(new ConcreteObserver(subject, "Y"));
subject.attach(new ConcreteObserver(subject, "Z"));
subject.setSubjectState("ABC");
subject.mNotify();
} }
最新文章
- webpack 使用教程--实时刷新测试
- Linux rpm 查询
- ASP.NET MVC学习系列(一)-WebAPI初探
- Ubuntu查看系统的信息
- C++ Redis mset 二进制数据接口封装方案
- HDFS副本机制&;负载均衡&;机架感知&;访问方式&;健壮性&;删除恢复机制&;HDFS缺点
- NPOI--操作Excel之利器(一)
- erlang mnesia 数据库实现SQL查询
- LINUX环境并发服务器的三种实现模型
- Javascript高级编程学习笔记(98)—— WebGL(4) WebGL上下文(2)
- css文字与排版
- CSS 图像高级 CSS 渐变
- #221 Iterate Through an Array with a For Loop
- mysql练习----More JOIN operations
- Jenkins+PowerShell持续集成环境搭建(四)常用PowerShell命令
- Inline Route Constraints in ASP.NET Core MVC
- maven +bootstrap+ssm
- sklearn datasets模块学习
- 003-pro ant design 前端权限处理-支持URL参数的页面
- Hakase and Nano 【思维博弈】
热门文章
- python代码风格检查工具──pylint
- ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程
- 如何构造请求处理对象链(Pipeline)
- WPF响应长按事件
- WPF异常捕获,并使程序不崩溃!
- Kivy A to Z -- Kivy 示例演示自带名单
- 【C++】【TinyXml】xml文件的读写功能使用——写xml文件
- Entity种类(动态代理)
- js 看图识国家
- WPF中获取TreeView以及ListView获取其本身滚动条的方法,可实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条)