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

来源:互联网 发布:php csdn博客 编辑:程序博客网 时间:2024/06/06 04:01
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 = newLinkedList<Watcher>();
@Override
public void addActionListener(Watcherwatcher) 
{
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("我是监听器中的事件处理器");
}

}
0 0