图片下载网站,关于外贸的网站,网站设计与网页制作招聘,门户网站的优缺点文章目录 前言一、观察者1.定义一个观察者接口2.察者接口具体实现类 二、主题1.定义一个主题接口2.主题接口具体实现类 三、枚举维护观察者1.定义枚举类维护观察者 四、观察者模式测试1.定义观察者模式测试接口2.观察者模式测试运行结果 前言
本文介绍使用枚举的方式实现的观察… 文章目录 前言一、观察者1.定义一个观察者接口2.察者接口具体实现类 二、主题1.定义一个主题接口2.主题接口具体实现类 三、枚举维护观察者1.定义枚举类维护观察者 四、观察者模式测试1.定义观察者模式测试接口2.观察者模式测试运行结果 前言
本文介绍使用枚举的方式实现的观察者模式简单易用容易维护非常适合日常的开发使用。 一、观察者
1.定义一个观察者接口
// 定义一个观察者接口用于观察主题对象的状态变化
public interface Observer {// 发布消息void update(String message);}2.察者接口具体实现类
package com.jareny.jave.design.observer.object.base;// 实现观察者接口的具体类用于观察主题对象的状态变化
public class ConcreteObserver implements Observer{Overridepublic void update(String message) {System.out.println(观察到主题对象的状态变化具体类收到通知 message);}
}二、主题
1.定义一个主题接口
package com.jareny.jave.design.observer.object.base;// 定义一个主题接口被观察者接口用于通知观察者对象状态变化
public interface Subject {// 注册观察者void registerObserver(Observer observer);// 删除观察者void removeObserver(Observer observer);// 通知观察者void notifyObservers(String message);}
2.主题接口具体实现类
package com.jareny.jave.design.observer.object.base;import java.util.ArrayList;
import java.util.List;// 实现主题接口被观察者接口的具体类用于通知观察者对象状态变化
public class ConcreteSubject implements Subject {private ListObserver observers new ArrayList();Overridepublic void registerObserver(Observer observer) {observers.add(observer);}Overridepublic void removeObserver(Observer observer) {observers.remove(observer);}Overridepublic void notifyObservers(String message) {observers.forEach(observer-observer.update(message));}}
三、枚举维护观察者
1.定义枚举类维护观察者
package com.jareny.jave.design.observer.object.enums;import com.jareny.jave.design.observer.object.base.ConcreteObserver;
import com.jareny.jave.design.observer.object.base.Observer;
import com.jareny.jave.design.observer.object.base.Subject;
import lombok.AllArgsConstructor;
import lombok.Getter;import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;Getter
AllArgsConstructor
public enum ObserverEnum {/*** 第一个观察者*/Observer1(张三,学生){Overridepublic void register(Subject subject) {// 创建观察者对象1Observer observer new ConcreteObserver();// 主题对象注册观察者对象1subject.registerObserver(observer);}},/*** 第二个观察者*/Observer2(李四,老师){Overridepublic void register(Subject subject) {// 创建观察者对象2Observer observer new ConcreteObserver();// 主题对象注册观察者对象2subject.registerObserver(observer);}},;// 名称private String name;// 类型private String type;/*** 注册观察者* param subject*/public abstract void register(Subject subject);/*** 获取所以的观察者* return*/public static ListObserverEnum getObserverEnumList(){return Stream.of(values()).collect(Collectors.toList());}}四、观察者模式测试
1.定义观察者模式测试接口 package com.jareny.jave.design.observer.object.enums;import com.jareny.jave.design.observer.object.base.ConcreteObserver;
import com.jareny.jave.design.observer.object.base.ConcreteSubject;
import com.jareny.jave.design.observer.object.base.Observer;
import com.jareny.jave.design.observer.object.base.Subject;import java.util.List;public class ObserverEnumExample {public static void main(String[] args) {// 创建主题对象Subject subject new ConcreteSubject();// 创建观察者对象列表ListObserverEnum observerEnumList ObserverEnum.getObserverEnumList();// 观察者对象全部注册到主题对象observerEnumList.forEach(observer-observer.register(subject));// 主题对象通知所有观察者对象状态变化subject.notifyObservers(主题对象状态发生变化);}
}使用枚举将观察者注册到订阅的主题种 2.观察者模式测试运行结果
运行程序得到以下结果
观察到主题对象的状态变化具体类收到通知主题对象状态发生变化
观察到主题对象的状态变化具体类收到通知主题对象状态发生变化