网站建设分为哪几个步骤,外贸行业前景怎么样,网站有多少个,评析网站建设报价单观察者#xff08;Observer Pattern#xff09;
定义对象间的一种一对多的依赖关系#xff0c;当一个对象的状态发生改变时#xff0c;所有依赖于它的对象都得到通知并被自动更新。主要解决一个对象状态改变给其他对象通知的问题#xff0c;而且要考虑到易用和低耦合Observer Pattern
定义对象间的一种一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都得到通知并被自动更新。主要解决一个对象状态改变给其他对象通知的问题而且要考虑到易用和低耦合保证高度的协作。
观察者模式是一种对象行为型模式观察者和被观察者之间的关系属于抽象耦合关系主要优点是在观察者与被观察者之间建立了一套事件触发机制以降低二者之间的耦合度。
观察者模式的主要角色如下
抽象被观察者角色Subject持有订阅了该主题的观察者对象的集合同时提供了增加、删除观察者对象的方法和主题状态发生变化后的通知方法。具体被观察者角色Concrete Subject实现了抽象主题的通知方法在主题的内部状态发生变化时调用该方法通知订阅了主题状态的观察者对象。抽象观察者角色Observer观察者的抽象类或接口定义了主题状态发生变化时需要调用的方法。具体观察者角色Concrete Observer抽象观察者的实现类在收到主题状态变化的信息后执行具体的触发机制。
UML设计图如下 1抽象被观察者角色Subject
package cn.jaa.observer_pattern;import java.util.ArrayList;
import java.util.List;/*** author : Jaa* date : 2023-12-04* description: 抽象被观察者角色持有订阅了该主题的观察者对象的集合同时提供了增加、删除观察者对象的方法和主题状态发生变化后的通知方法。*/
public abstract class Subject {protected ListObserver observers new ArrayList();public void add(Observer observer) {observers.add(observer);}public void remove(Observer observer) {observers.remove(observer);}public abstract void notifyObserver(String message);
}
2具体被观察者角色Concrete Subject
package cn.jaa.observer_pattern;import lombok.extern.slf4j.Slf4j;/*** author : Jaa* date : 2023-12-04* description: 具体被观察者角色: 实现了抽象主题的通知方法在主题的内部状态发生变化时调用该方法通知订阅了主题状态的观察者对象。*/
Slf4j
public class ConcreteSubject extends Subject {Overridepublic void notifyObserver(String message) {for (Observer observer : observers) {log.info(notify observer message change ...);observer.dataChange(message);}}
}
3抽象观察者角色Observer
package cn.jaa.observer_pattern;/*** author : Jaa* date : 2023-12-04* description: 抽象窜擦着角色定义了主题状态发生变化时需要调用的方法*/
public interface Observer {void dataChange(String message);
}
4具体观察者角色Concrete Observer
package cn.jaa.observer_pattern;import lombok.extern.slf4j.Slf4j;/*** author : Jaa* date : 2023-12-04* description: 具体观察者角色: 抽象观察者的实现类在收到主题状态变化的信息后执行具体的触发机制*/
Slf4j
public class ConcreteObserver implements Observer {Overridepublic void dataChange(String message) {log.info(receive message: message);}
}
5测试观察者模式
package cn.jaa.observer_pattern;/*** author : Jaa* date : 2023-12-04* description:*/
public class ObserverDemoTest {public static void main(String[] args) {Observer observer new ConcreteObserver();Subject subject new ConcreteSubject();subject.add(observer);subject.notifyObserver(data);}
}
打印结果