现在的位置: 首页 > 综合 > 正文

设计模式–观察者(监听)设计模式

2013年12月02日 ⁄ 综合 ⁄ 共 1792字 ⁄ 字号 评论关闭

学习了一下设计模式,怕忘记了,写个总结,也好常复习一下。

监听设计模式要包含几个重要的部分:

1、事件

2、事件源

3、响应事件的监听者

就拿下面的图片来解释一下

如图所示的,后面站着的肯定是监听者了,监听着敲代码这个事件,而程序猿就是那个敲代码的事件源

建一个工程

import java.util.ArrayList;
import java.util.List;

public class Main {
    /**
     * @description 测试
     */
    public static void main(String[] args) {
        Programmer pro = new Programmer();//生成一个事件源对象,将要做事情
        pro.addListener(new PM());//增加监听者
        pro.addListener(new Director());//增加监听者
        pro.addListener(new Chief());//增加监听者
        pro.updateCode();//程序猿去修改代码
    }
}
abstract class ActionEvent{
    
}
/**
 * @description 编程事件
 *
 */
class Code extends ActionEvent{
    //这个事件的属性是敲打代码、修改代码、处理时间等等...
    private boolean beat=true;//默认敲代码
    private boolean update=true;//默认修改代码
    private long time;
    public boolean isBeat() {
        return beat;
    }
    public void setBeat(boolean beat) {
        this.beat = beat;
    }
    public boolean isUpdate() {
        return update;
    }
    public void setUpdate(boolean update) {
        this.update = update;
    }
    public long getTime() {
        return time;
    }
    public void setTime(long time) {
        this.time = time;
    }
}
/**
 * 
 * @description 程序员要根据编程事件的属性进行操作
 *
 */
class Programmer{
    
    //程序猿被n个人监听着
    private List<ActionEventListener> list = new ArrayList<ActionEventListener>();
    public void addListener(ActionEventListener ael){//程序猿的监听者们,要同意别人监听才行
        list.add(ael);
    }
    ActionEvent e = new Code();    
    //需要修改时,程序猿进行修改操作
    public void updateCode(){
        if(((Code) e).isUpdate()){//如果是真,则需要进行修改
            System.out.println("程序猿修改代码");
            //监听者们的做法
            for(int i = 0 ; i < list.size();++i){
                ActionEventListener a = list.get(i);
                a.actionPerformed(e);
            }
        }
    }    
}
interface ActionEventListener{
    public void actionPerformed(ActionEvent e);
}
class PM implements ActionEventListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("修改完代码后,项目经理说,那里还不行,缺个分好;");
    }
    
}
class Director implements ActionEventListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("修改完代码后,运营总监说,你没做出我想要的感觉");
    }
}
class Chief implements ActionEventListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("修改完代码后,总经理说,再做几个方案!给我选");
    }    
}

抱歉!评论已关闭.