zoukankan      html  css  js  c++  java
  • 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());
    }
    }

  • 相关阅读:
    Duang!异地多活!_InfoQ_传送门
    异地多活设计辣么难?其实是你想多了!-博客-云栖社区-阿里云
    途牛谭俊青:多数据中心状态同步&两地三中心的理论
    魅族多机房部署方案
    荔枝FM架构师刘耀华:异地多活IDC机房架构
    zz
    “异地多活”多机房部署经验谈_运维管理_数据中心_中国IDC圈
    天猫双11晚会和狂欢城的互动技术方案
    案例 | 魅族云端同步的架构实践和协议细节
    如何应对大促?看京东核心中间件团队的高可用实践指南
  • 原文地址:https://www.cnblogs.com/cyz110/p/6544853.html
Copyright © 2011-2022 走看看