Java学习笔记28 观察者模式(awt中…

xiaoxiao2021-02-28  110

1.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当这个主题对象的状态发生变化时,会通知所有观察者对象,让他们能够自动更新自己 2.观察者模式组成     1)抽象主题角色:把所有观察者对象的引用集中在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口可以增加和删除观察者角色。一般用抽象类或接口来实现     2)抽象观察者角色:为所有具体的观察者定义一个接口,在得到主题的通知时更新自己     3)具体主题角色:在具体主题内部状态改变时给所有登记过的观察者发出通知。具体主题角色通常用一个子类实现     4)具体观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调,如果需要,具体观察者角色可以保存一个指向具体主题角色的引用。通常用一个子类实现 观察者模式,理解Button的事件执行过程: package com.observer; import java.util.LinkedList; import java.util.List; public class Client  { public static void main(String[] args)//我是主程序 { ConcretWatcher con1 = new ConcretWatcher(); ConcretWatcher con2 = new ConcretWatcher(); ConcretButton button = new ConcretButton();//实例化一个按钮类 button.addActionListener(con1);//我注册一个事件监听器 button.addActionListener(con2);//我再注册一个事件监听器 button.notifyActionListener();//我相当于按钮被按下 System.out.println("*********"); button.removeActionListener(con1);//我删掉第一个事件监听器 button.notifyActionListener();//我相当于按钮被按下 } } interface Button1 //我是按钮接口,给实现我的按钮类提供了一定的规范 { public void addActionListener(Watcher watcher); public void removeActionListener(Watcher watcher); public void notifyActionListener(); } class ConcretButton implements Button1//我是按钮类,实现了按钮接口 { List<Watcher> list = new LinkedList<Watcher>(); @Override public void addActionListener(Watcher watcher)  { System.out.println("我要加一个监听器"); list.add(watcher); } @Override public void removeActionListener(Watcher watcher) { System.out.println("我不要这个监听器了"); list.remove(watcher); }@Override public void notifyActionListener()  { System.out.println("我有事件发生了,通知一下你们"); for(Watcher a : list) { System.out.println("通知了一次"); a.actionPerfomed(); } } } interface Watcher//我是监听接口 { public void actionPerfomed(); } class ConcretWatcher implements Watcher //我是具体的监听类,实现了监听接口 { @Override public void actionPerfomed() { System.out.println("我是监听器中的事件处理器"); } }
转载请注明原文地址: https://www.6miu.com/read-26279.html

最新回复(0)