设计模式-观察者模式
import java.util.ArrayList; import java.util.List; public class 观察者模式 { public static void main(String[] args) { Subject subjectA = new ConcreteSubject("低频"); Observer observer1 = new ConcreteObserver("张三", subjectA); Observer observer2=new ConcreteObserver("李四",subjectA); Observer observer3=new ConcreteObserver("王五",subjectA); //subjectA.Notify(); subjectA.setStatus("更新了"); } } interface Subject{ public void Attach(Observer observer);//添加观察者 public void Detach(Observer observer);//删除观察者 public void Notify();//目标发生改变时通知所有的观察者 public String getStatus(); public void setStatus(String status); } class ConcreteSubject implements Subject{ private String name; private String status; private List<Observer> list; public ConcreteSubject(String name) { status="未更新"; this.name=name; list=new ArrayList<>(); } @Override public void setStatus(String status) { this.status=status; System.out.println(name+"的状态发生改变,变化后的状态为:"+status); Notify(); } @Override public String getStatus() { return status; } @Override public void Attach(Observer observer) { list.add(observer); } @Override public void Detach(Observer observer) { list.remove(observer); } @Override public void Notify() { for(Observer observer :list) { observer.update(); } } } interface Observer{ public void update(); } class ConcreteObserver implements Observer{ private Subject subject; private String name; private String status; public ConcreteObserver(String name,Subject subject) { this.name=name; this.subject=subject; subject.Attach(this); } @Override public void update() { System.out.println(name+" 收到通知"); status=subject.getStatus(); System.out.println("改变后的状态为"+status); } }
运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!