java实现监听某一个参数改变的逻辑
时间: 2023-11-09 08:05:39 浏览: 32
在 Java 中,可以使用观察者模式来监听某个参数的变化。观察者模式是一种设计模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它会自动通知所有观察者对象,使它们能够及时更新自己的状态。
下面是一个简单的示例,演示了如何使用观察者模式来监听某个参数的变化:
1. 创建一个主题接口 `Subject`,它定义了添加、删除和通知观察者的方法:
```java
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers();
}
```
2. 创建一个观察者接口 `Observer`,它定义了更新方法:
```java
public interface Observer {
void update(double value);
}
```
3. 创建一个具体主题类 `ConcreteSubject`,它实现了主题接口,并且维护了一个参数值:
```java
public class ConcreteSubject implements Subject {
private double value;
private List<Observer> observers;
public ConcreteSubject() {
this.observers = new ArrayList<>();
}
public void setValue(double value) {
if (this.value != value) {
this.value = value;
notifyObservers();
}
}
public double getValue() {
return this.value;
}
@Override
public void registerObserver(Observer observer) {
this.observers.add(observer);
}
@Override
public void removeObserver(Observer observer) {
this.observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : this.observers) {
observer.update(this.value);
}
}
}
```
4. 创建一个具体观察者类 `ConcreteObserver`,它实现了观察者接口,并且在更新方法中打印出参数值:
```java
public class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(double value) {
System.out.println(this.name + " received update: " + value);
}
}
```
5. 在主函数中测试代码:
```java
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer1 = new ConcreteObserver("Observer1");
ConcreteObserver observer2 = new ConcreteObserver("Observer2");
subject.registerObserver(observer1);
subject.registerObserver(observer2);
subject.setValue(3.14); // Observer1 和 Observer2 都会收到通知
subject.setValue(2.71); // Observer1 和 Observer2 都会收到通知
subject.removeObserver(observer1);
subject.setValue(1.41); // 只有 Observer2 会收到通知
}
```
在上面的示例中,我们创建了一个主题对象 `ConcreteSubject`,它维护了一个参数值,并且实现了主题接口中的方法。我们还创建了两个观察者对象 `observer1` 和 `observer2`,它们实现了观察者接口中的方法。我们注册了这两个观察者对象到主题对象中,使它们能够监听参数值变化。最后,我们测试了代码,通过调用 `setValue()` 方法来改变参数值,观察者对象会收到通知,并且更新自己的状态。