• java设计模式之观察者模式


    所谓的观察者模式其实就像广播那样,一个广播站在广播,其余的收音机在接受,收音机接收到的内容随着广播站的内容变化而变化,这就是所有的观察者模式,

    其中广播站相当于目标对象,而收音机就是传说中的观察者,所有的观察者会根据目标对象的变化而变化,生活中有很多观察者模式应用的场景,比如事件的监听。

    package observer;

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

    //定义一个目标对象类,其他观察者会根据目标类状态的改变发生改变

    public class Subject {
    protected List<ObserverA> list =new ArrayList<ObserverA>();
    public void registerObserver(ObserverA obs1){
    list.add(obs1);
    }
    public void removeObserver(Observer obs){
    list.remove(obs);
    }
    //通知所有观察着更新状态
    public void notifyAllObserver(){
    for(ObserverA obs:list){
    obs.update( this);
    }
    }

    }

    //定义观察者接口。

    package observer;

    public interface Observer {
    void update(Subject subject);
    }

    //定义观察者具体的实现

    package observer;

    public class ObserverA implements Observer{

    private int myState;//myState需要与目标对象保持一致
    @Override
    public void update(Subject subject) {
    // TODO Auto-generated method stub
    myState=((ConcreateSubject)subject).getState();
    }
    public ObserverA() {
    super();
    }
    public int getMyState() {
    return myState;
    }
    public void setMyState(int myState) {
    this.myState = myState;
    }

    }

    package observer;
    /**
    * 根据目标对象通知所有的观察着发生变化
    * @author zzdxw
    *
    */
    public class ConcreateSubject extends Subject {
    private int state;
    public int getState(){
    return state;
    }
    public void setState(int state){
    this.state=state;
    //通知所有的观察着发生变化
    this.notifyAllObserver();
    }
    }

    package observer;
    /**
    * 客户端进行测试。
    * @author zzdxw
    *
    */

    public class Client {
    public static void main(String[] args) {
    ObserverA obs1=new ObserverA();
    ObserverA obs2=new ObserverA();
    ObserverA obs3=new ObserverA();
    ConcreateSubject cs=new ConcreateSubject();
    cs.registerObserver(obs1);
    cs.registerObserver(obs2);
    cs.registerObserver(obs3);
    cs.setState(2000);
    System.out.println("变化后的观察者");
    System.out.println(obs1.getMyState());
    System.out.println(obs2.getMyState());
    System.out.println(obs3.getMyState());
    }
    }

  • 相关阅读:
    python gzip get url
    nginx 日志解析,nginx缓存
    Keepalived
    SEO 搜索引擎优化
    检测网站是否支持gzip的本地代码
    使用logrotate做nginx日志轮询
    YUI Compressor下载
    Adobe Illustrator有 机会装一下
    同步时间
    买不起书啊nginx http server filetype:pdf 30刀
  • 原文地址:https://www.cnblogs.com/cyz110/p/6544853.html
Copyright © 2020-2023  润新知