免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
搜索
本版
文章
帖子
ToB圈子
用户
登录
立即注册
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微头条
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
数据库
›
SQL-Server
›
计划模式-观察者模式
返回列表
发新帖
计划模式-观察者模式
[复制链接]
发表于 2025-7-9 05:15:19
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
观察者模式
也称为订阅—
发布
模式,在此模式中,一个目标对象管理所有相依于它的观察者对象,而且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用在事故处理系统。
观察者模式利用三个类: Subject(被观察的主体)、Observer(观察者) 和 测试类
Subject的操纵会通知所有注册的Observer,Subject可以添加删除Observer
Subject
import java.util.List;
import java.util.Vector;
/**
* 被观察主体
* @Author mubi
* @Date 2020/6/17 09:27
*/
public class Subject {
// 观察者
private List<Observer> observers = new Vector<>();
// 观察主体的状态变化
private int state;
public int getState() {
return state;
}
/**
自身状态变化后,通知所有的观察者
*/
public void setState(int state) {
this.state = state;
notifyAllObservers();
}
public void addObserver(Observer observer){
observers.add(observer);
}
public void delObserver(Observer observer){
observers.remove(observer);
}
public void notifyAllObservers(){
// 通知观察者,不同观察者执行不同的事情
for (Observer observer : observers) {
observer.update();
}
}
}
复制
代码
Observer 抽象类
/**
* @Author mubi
* @Date 2020/6/17 09:27
*/
public abstract class Observer {
protected Subject subject;
public abstract void update();
}
复制
代码
详细的Observer类
/**
* @Author mubi
* @Date 2020/6/17 09:27
*/
public class BinaryObserver extends Observer {
public BinaryObserver(Subject subject) {
this.subject = subject;
}
@Override
public void update() {
System.out.println("Binary String: " + Integer.toBinaryString(subject.getState()));
}
}
复制
代码
/**
* @Author mubi
* @Date 2020/6/17 09:28
*/
public class OctalObserver extends Observer {
public OctalObserver(Subject subject) {
this.subject = subject;
}
@Override
public void update() {
System.out.println("Octal String: " + Integer.toOctalString(subject.getState()));
}
}
复制代码
测试
/**
* @Author mubi
* @Date 2020/6/17 09:32
*/
public class DesignTest {
public static void main(String[] args) {
Subject subject = new Subject();
Observer observer1 = new BinaryObserver(subject);
Observer observer2 = new OctalObserver(subject);
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.setState(10);
System.out.println();
subject.setState(12);
System.out.println();
subject.delObserver(observer1);
subject.setState(13);
System.out.println();
}
}
复制代码
输出:
Binary String: 1010
Octal String: 12
Binary String: 1100
Octal String: 14
Octal String: 15 // 因为此前删除了 BinaryObserver
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
返回列表
浏览过的版块
Oracle
DevOps与敏捷开发
道家人
+ 我要发帖
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表