四川省成华区建设局网站,电子科技公司网站网页设计,浙江省建设门户网站,工程公司排名一、前言
观察者模式#xff0c;又称为发布订阅模式#xff0c;是一种行为设置模式#xff0c;允许对象之间建立一对多的依赖关系#xff0c;这样当一个对象状态改变时#xff0c;它的所有依赖者#xff08;观察者#xff09;都会收到通知并自动更新。
二、具体实现
…一、前言
观察者模式又称为发布订阅模式是一种行为设置模式允许对象之间建立一对多的依赖关系这样当一个对象状态改变时它的所有依赖者观察者都会收到通知并自动更新。
二、具体实现
1、发布订阅案例
观察者接口
/*** Description: 观察者接口* Date: 2024-12-27 10:08* Author: gaoyufei**/
public interface Observer {void accept(String message);
}观察者实现
/*** Description: 订阅者* Date: 2024-12-27 10:10* Author: gaoyufei**/
public class Subscriber implements Observer{public String clientId;public Subscriber(String clientId){this.clientIdclientId;}Overridepublic void accept(String message) {System.out.println(订阅者clientId 接受到消息message);}
}主题接口
/*** Description: 主题接口* Date: 2024-12-27 10:15* Author: gaoyufei**/
public interface Subject {void add(Observer observer);void del(Observer observer);void notify(String message);
}主题实现
import java.util.ArrayList;
import java.util.List;/*** Description: 主题维护了订阅者列表通知订阅者* Date: 2024-12-27 10:16* Author: gaoyufei**/
public class Topic implements Subject {private ListObserver observerListnew ArrayList();Overridepublic void add(Observer observer) {observerList.add(observer);}Overridepublic void del(Observer observer) {observerList.remove(observer);}Overridepublic void notify(String message) {observerList.stream().forEach(e-{e.accept(message);});}
}模拟订阅者订阅主题客户端发布消息:
/*** Description: 模拟订阅者订阅主题客户端发布消息* Date: 2024-12-27 10:18* Author: gaoyufei**/
public class Client {public static void main(String[] args) {Topic topicnew Topic();Subscriber subscriber1new Subscriber(001);Subscriber subscriber2new Subscriber(002);Subscriber subscriber3new Subscriber(003);topic.add(subscriber1);topic.add(subscriber2);topic.add(subscriber3);topic.notify(您有一条新消息);}
}2、村长通知村民案例
观察者接口
/*** Description: 观察者接口* Date: 2024-12-27 9:35* Author: gaoyufei**/
public interface Observer {void accept(String message);
}观察者具体观察者村民
/*** Description: 具体观察者村民能接受消息* Date: 2024-12-27 9:37* Author: gaoyufei**/
public class Resident implements Observer{private String name;public Resident(String name){this.namename;}Overridepublic void accept(String message) {System.out.println(村民this.name 收到信息message);}
}抽象主题
/*** Description: 抽象主题* Date: 2024-12-27 9:39* Author: gaoyufei**/
public interface Subject {void add(Observer observer);void del(Observer observer);void notify(String message);
}主题的具体实现村长的记录本
import java.util.ArrayList;
import java.util.List;
/*** Description: 主题的具体实现村长的记录本维护了村民信息村长可以通过记录本给村民群发信息* Date: 2024-12-27 9:42* Author: gaoyufei**/
public class RecordBook implements Subject {private ListObserver observerList new ArrayList();Overridepublic void add(Observer observer) {observerList.add(observer);}Overridepublic void del(Observer observer) {observerList.remove(observer);}Overridepublic void notify(String message) {observerList.stream().forEach(e - {e.accept(message);});}
}村长登记村民信息用记录本给村民群发信息
/*** Description: 村长登记村民信息用记录本给村民群发信息* Date: 2024-12-27 9:44* Author: gaoyufei**/
public class VillageHead {public static void main(String[] args) {
// 1、村里村长有一个记录村民电话的本子村民都需要登记一下。
// 在村里有什么事情的时候村长就通过群发消息的方式通知村民。
// 2、村民就是观察者、订阅者村长发布信息记录本就是主题RecordBook recordBooknew RecordBook();Resident residentnew Resident(王满银);Resident resident1new Resident(孙玉亭);Resident resident2new Resident(孙玉厚);recordBook.add(resident);recordBook.add(resident1);recordBook.add(resident2);recordBook.notify(大家好今天下午三点来村支部开会有重要事情通知);}
}