当前位置: 首页 > wzjs >正文

攀枝花建设工程质量监督站投诉网站信息流推广的竞价机制是

攀枝花建设工程质量监督站投诉网站,信息流推广的竞价机制是,新手学做百度联盟网站,口碑好网站建设多少钱在软件设计中,观察者模式(Observer Pattern) 是一种高频使用的行为型设计模式,它定义了对象之间一对多的依赖关系,使得当一个对象状态改变时,其所有依赖对象(观察者)会自动收到通知并…

在软件设计中,观察者模式(Observer Pattern) 是一种高频使用的行为型设计模式,它定义了对象之间一对多的依赖关系,使得当一个对象状态改变时,其所有依赖对象(观察者)会自动收到通知并更新。这种模式在事件驱动系统、GUI框架、实时数据处理等领域应用广泛。本文将从模式原理、Java实现、应用场景、源码级优化等角度,深度剖析观察者模式的设计哲学与实践技巧。

一、观察者模式的核心思想

观察者模式的核心是解耦被观察者(Subject)与观察者(Observer),其设计目标包括:

  1. 动态订阅与取消订阅:观察者可以灵活注册或解除对主题的关注。

  2. 状态同步:主题状态变化时,所有观察者能自动响应。

  3. 松耦合:主题无需知道观察者的具体实现细节,仅依赖抽象接口。

模式角色划分
  • Subject(主题):维护观察者列表,提供注册、注销和通知方法。

  • ConcreteSubject(具体主题):实现Subject,存储状态,并在状态变化时触发通知。

  • Observer(观察者):定义更新接口,供主题调用。

  • ConcreteObserver(具体观察者):实现Observer接口,执行具体业务逻辑。


二、Java实现观察者模式:原生支持与自定义实现

1. Java内置观察者模式(java.util.Observable)

Java早期通过 Observable 类和 Observer 接口提供了观察者模式的原生支持,但因其设计缺陷(如Observable是类而非接口),在Java 9后被标记为废弃。以下是经典实现:

// 被观察者(继承Observable)
public class WeatherStation extends Observable {private float temperature;public void setTemperature(float temperature) {this.temperature = temperature;setChanged();    // 标记状态变化notifyObservers(temperature); // 通知观察者(可传递数据)}
}// 观察者(实现Observer接口)
public class Display implements Observer {@Overridepublic void update(Observable o, Object arg) {if (o instanceof WeatherStation) {System.out.println("温度更新: " + arg + "°C");}}
}// 使用示例
public class Client {public static void main(String[] args) {WeatherStation station = new WeatherStation();Display display = new Display();station.addObserver(display);station.setTemperature(25.5f); // 触发通知}
}
2. 自定义观察者模式实现(推荐)

为避免Java内置实现的局限性,可自定义观察者模式:

// 主题接口
public interface Subject<T> {void registerObserver(Observer<T> observer);void removeObserver(Observer<T> observer);void notifyObservers(T data);
}// 具体主题
public class WeatherStation implements Subject<Float> {private List<Observer<Float>> observers = new ArrayList<>();private float temperature;@Overridepublic void registerObserver(Observer<Float> observer) {observers.add(observer);}@Overridepublic void notifyObservers(Float data) {observers.forEach(observer -> observer.update(data));}public void setTemperature(float temperature) {this.temperature = temperature;notifyObservers(temperature);}
}// 观察者接口(泛型支持)
public interface Observer<T> {void update(T data);
}// 具体观察者
public class Display implements Observer<Float> {@Overridepublic void update(Float temperature) {System.out.println("[Display] 当前温度: " + temperature);}
}

优势分析

  • 类型安全:通过泛型避免强制类型转换。

  • 灵活性:Subject和Observer接口可自由扩展。

  • 解耦彻底:不依赖Java废弃类。


三、观察者模式的进阶应用与优化

1. 异步通知机制

在高并发场景中,同步通知可能阻塞主题线程。可通过线程池实现异步通知:

// 在Subject实现类中注入线程池
private ExecutorService executor = Executors.newCachedThreadPool();public void notifyObservers(T data) {observers.forEach(observer -> executor.submit(() -> observer.update(data)));
}
2. 防止观察者阻塞

若某个观察者处理时间过长,可能影响整体性能。可引入超时机制熔断策略

3. 观察者链与责任传递

观察者可形成责任链,在链中传递事件,直至被处理(类似事件冒泡)。


四、观察者模式的典型应用场景

1. GUI事件监听

例如Java Swing中的ActionListener,Android的OnClickListener

2. 分布式系统消息队列

如Kafka的生产者-消费者模型,本质是观察者模式的扩展。

3. Spring框架的事件机制

Spring的ApplicationEventApplicationListener实现了观察者模式,支持应用内事件驱动编程。

// 自定义事件
public class OrderEvent extends ApplicationEvent {public OrderEvent(Object source, String message) {super(source);this.message = message;}
}// 监听器
@Component
public class OrderListener implements ApplicationListener<OrderEvent> {@Overridepublic void onApplicationEvent(OrderEvent event) {System.out.println("收到订单事件: " + event.getMessage());}
}// 发布事件
applicationContext.publishEvent(new OrderEvent(this, "订单创建成功"));

五、观察者模式的优缺点与替代方案

优点
  • 符合开闭原则:新增观察者无需修改主题代码。

  • 动态建立对象间关系。

缺点
  • 通知顺序不可控:观察者接收通知的顺序不确定。

  • 循环依赖风险:观察者与主题相互引用可能导致内存泄漏。

替代方案
  • 发布-订阅模式:通过中间代理(如消息队列)彻底解耦生产者和消费者。

  • 响应式编程:如RxJava、Project Reactor,提供更强大的流处理能力。


六、总结

观察者模式是事件驱动架构的基石,其核心在于构建灵活、松耦合的交互系统。在Java生态中,无论是传统GUI开发,还是现代Spring框架、响应式编程,观察者模式的身影无处不在。开发者需根据场景选择合适实现方式,并注意线程安全、性能优化等关键问题。理解观察者模式,是掌握高扩展性系统设计的重要一步


文章转载自:

http://Lb6pjiVp.nwzcf.cn
http://geaLBVA1.nwzcf.cn
http://JjqJpRU1.nwzcf.cn
http://dr8Kfm6z.nwzcf.cn
http://sYBMZyiO.nwzcf.cn
http://GmlKjkGg.nwzcf.cn
http://TqRcOqCo.nwzcf.cn
http://F1d0pmLH.nwzcf.cn
http://LdlNshBZ.nwzcf.cn
http://4RfSQhCr.nwzcf.cn
http://oju7asri.nwzcf.cn
http://Z8ozcwJo.nwzcf.cn
http://Z0LAaHKM.nwzcf.cn
http://oDUHyrr1.nwzcf.cn
http://uISuJfqR.nwzcf.cn
http://xi3T7LTs.nwzcf.cn
http://v5bIAVAJ.nwzcf.cn
http://sZtbQ2jj.nwzcf.cn
http://P1uYfOFb.nwzcf.cn
http://wHmK4vJ3.nwzcf.cn
http://VIGjbJ8d.nwzcf.cn
http://ToCxsgQd.nwzcf.cn
http://f5jt0rfn.nwzcf.cn
http://MbHFIbSz.nwzcf.cn
http://jhAAF6Bl.nwzcf.cn
http://3WadilND.nwzcf.cn
http://jMDVn7lP.nwzcf.cn
http://Cxqt5FG7.nwzcf.cn
http://10AdkPa6.nwzcf.cn
http://knKBOx1e.nwzcf.cn
http://www.dtcms.com/wzjs/752768.html

相关文章:

  • 饭店的网站建设进行评价做电影网站涉及的侵权问题
  • 公家网站模板沈阳市城乡建设局网站首页
  • app打包网站开发源码房建设计图网站
  • 回收类型网站如何做淄博学校网站建设报价
  • 申办网站流程网站建设是管理费用的哪项费用
  • 黑客软件资源网站ASP个人网站的建设
  • 网站门户建设方案设计师服务平台鱼巴士
  • 属于网站建设过程规划和准备阶段的是百度做公司网站多少钱
  • 智库建设网站微信开发者工具官网下载
  • 网站制作价格上海网站权重低
  • 怎么区分网站的好坏石家庄网站推广招聘
  • 上海网站建设设计企业网站维护报价
  • 厦门工程网站建设广州哪里做公司网站号
  • 做谱的网站门户网站首页
  • 网站建设友链交换中国发达国家
  • 使用织梦系统建设网站教程上海企业信用信息公示系统(上海)
  • 夫妻性做受视频什么网站wordpress用户10亿
  • 做网站红色和什么搭配好政务网站的建设
  • 无锡网站建设哪家做得比较好建筑工程网上竣工验收入口
  • ps软件下载官方网站郑州 小程序开发
  • 建设网站的主要流程图荷兰网站后缀
  • 有没有做头像的网站网站栏目建设
  • 珠宝网站建商台北英文seo兼职
  • 网站优化是什么意思西安官网seo诊断
  • php公司网站手机网站内容规划
  • 建网站的公司哪家好做网站推广常识题库及答案
  • 东莞seo网站推广wordpress支持字体
  • 广州萝岗区网站建设昆明软件开发公司做门户网站的
  • 水文站网站建设应当坚持常德网站制作公司
  • 营销型网站试运营调忧公司网站案例展示