观察者模式的应用场景:
在有些场景,比如多个类可能需要依赖一个类,比如价格,如果产品价格发生变化,那么依赖他的类也需要拍做出相应的变化或者更新。那么这些依赖产品的类就是观察者,产品就是被观察者抑或主题对象。
/**
* 这是一个观察者接口,如果要作为一个观察者对象
* 需要实现该接口,这个接口一般定义一些公共的且
* 需要操作主题对象的方法
* @author nickyzhang
*/
public interface Observer {
//Observable 代表了主体对象 ,因为你需要更新什么对象,我们需要知道
//什么东西变化我们才需要更新
public abstract void update(Observable obs, Object obj);
}
package com.aaxis.pattern.observer;
import java.util.ArrayList;
import java.util.List;
public abstract class Observable {
//保存绑定该主体对象的监听器
List<Observer> listenerList = new ArrayList<Observer>();
//注册观察者
public void registerObserver(Observer o){
listenerList.add(o);
}
//删除观察者
public void removeObserver(Observer o){
listenerList.remove(o);
}
//什么属性变化通知注册的所有观察者
public void notifyAllObserver(Object value){
//遍历每一个观察者,并且根据变化的值进行更新
for(Observer o : listenerList){
o.update(this, value);
}
}
}
/**主题对象==被观察者*/
public class Product extends Observable{
private String name;
private double price;
public Product() {
}
public Product(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
//当有程序调用Product的setName时自动通知观察者
notifyAllObserver(name);
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
notifyAllObserver(price);
}
}
//两个观察者
public class NameObserver implements Observer {
public void update(Observable obs, Object obj) {
if(obj instanceof String){
System.out.println("姓名观察者:"+obs+"名称以变为"+obj);
}
}
}
public class PriceObserver implements Observer{
public void update(Observable obs, Object obj) {
if(obj instanceof Double) {
System.out.println("价格观察者:"+obs +"价格改变为:"+obj);
}
}
}
public class ObserverTest {
public static void main(String[] args) {
Product product = new Product("Guiatr",4568.23);
NameObserver nameObserver = new NameObserver();
PriceObserver priceObserver = new PriceObserver();
product.registerObserver(nameObserver);
product.registerObserver(priceObserver);
product.setName("Bass");
product.setPrice(3456.12);
}
}
相关推荐
ObserverPattern.unitypackage是一个以unity为例写的观察者模式的应用举例。有需要的同学请下载!
在IT行业中,观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它允许一个对象,当其状态发生改变时,能够自动通知所有依赖它的对象。在MATLAB中实现观察者模式,可以帮助我们构建灵活、可扩展的代码结构,特别是在...
`obsever_chua.mdl`文件很可能是一个已经搭建好的Simulink模型,其中包含了Chua电路的建模以及观测器的设计。用户可以通过这个模型来观察和分析Chua系统在不同条件下的行为,并验证观测器对系统状态估计的准确性。 ...
而"基于观察者的同步"则涉及控制理论中的状态估计,用于获取系统不可直接测量的状态信息。在本场景中,我们将讨论如何在MATLAB的Simulink环境中构建蔡氏系统的观测器同步模型。 **蔡氏系统** 蔡氏系统由Leon Chua...
Observer是一款强大的网络管理工具,专为IT专业人员设计,提供了全面的监控、认证和日志记录功能,确保企业级服务器的安全和稳定运行。这个工具的关键特性在于它的索引型可视化数据库,可以精确地记录和回放服务器上...
STM32 MC FOC SDK 是一个专为STM32微控制器设计的磁场定向控制(Field Oriented Control,简称FOC)软件开发套件。这个SDK主要用于帮助开发者在STM32平台上实现高性能的电机控制,特别是在需要高精度和高效能的应用...
STM32FOC电机控制角度速度计算源代码MC_State_Observer
意法半导体公司关于电机控制器的源代码程序,此为其中的观测器源代码
双向数据绑定无非就是... 实现视图层的更新:订阅者模式,定义个 Watcher 函数实现对DOM的更新(Watcher) 将数据和视图层进行绑定,解析指令v-bind、v-model、v-click(myVue.prototype._compile) 创建Vue实例(new myV
11.无刷滑膜Slide Mode Obsever 12.永磁同步电机smo滑膜观测算法带文档 13.永磁同步电机滑模控制Simulink仿真模型 14.永磁同步电机滑膜变结构无速度传感器控制Simulink仿真模型 15.永磁同步直线电机PMLSM矢量控制...