企业网站的建设过程seo是啥
定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。
观察者模式是一种发布-订阅模式。它让发送通知的一方(被观察者)和接收通知的一方(观察者)能够解耦,实现了对象之间的松耦合。
观察者模式的核心角色。
- Subject(主题/被观察者):维护观察者列表,提供添加、删除观察者的方法,以及通知观察者的方法。
- Observer(观察者):定义一个更新接口,用于在主题状态改变时接收通知。
- ConcreteSubject(具体主题):实现主题接口,存储具体状态,当状态改变时通知所有观察者。
- ConcreteObserver(具体观察者):实现观察者接口,维护一个指向具体主题的引用,存储与主题相关的状态。
下面是一个完整的观察者模式 Demo。
定义观察者接口。
public interface Observer {void update(String message);
}
定义主题接口。
public interface Subject {void registerObserver(Observer observer);void removeObserver(Observer observer);void notifyObservers(String message);
}
实现具体主题。
import java.util.ArrayList;
import java.util.List;public class ConcreteSubject implements Subject {private List<Observer> observers = new ArrayList<>();@Overridepublic void registerObserver(Observer observer) {observers.add(observer);}@Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}@Overridepublic void notifyObservers(String message) {for (Observer observer : observers) {observer.update(message);}}public void changeState(String newState) {System.out.println("Subject state changed to: " + newState);notifyObservers(newState);}
}
实现具体观察者。
public class ConcreteObserver implements Observer {private String name;public ConcreteObserver(String name) {this.name = name;}@Overridepublic void update(String message) {System.out.println(name + " received message: " + message);}
}
执行测试代码,输出结果。
public class ObserverPatternDemo {public static void main(String[] args) {// 创建主题ConcreteSubject subject = new ConcreteSubject();// 创建观察者Observer observer1 = new ConcreteObserver("Observer 1");Observer observer2 = new ConcreteObserver("Observer 2");Observer observer3 = new ConcreteObserver("Observer 3");// 注册观察者subject.registerObserver(observer1);subject.registerObserver(observer2);subject.registerObserver(observer3);// 改变主题状态,观察者会收到通知subject.changeState("State 1");// 移除一个观察者subject.removeObserver(observer2);// 再次改变状态subject.changeState("State 2");}
}
可以看到,只要主题类发生变更,依赖于它的观察者都会收到通知并进行相应的更新。
总结
观察者模式。将主题和观察者解耦,实现了对象之间的松耦合。是一种一对多的通知机制,使得双方无需关心对方,只关心通知本身。