观察者模式

标签: 设计模式 观察者模式
15人阅读 评论(0) 收藏 举报
分类:

理解

观察者模式:一种一对多的方式,类似报纸和订阅报纸的人,报纸每次发布一个新的版本,都会通知到订阅报纸的人。主题和订阅者都是按接口的方式联系,可以轻松的增加主题和增加订阅者,只要实现一个固定的接口

代码

java 接口实现
//观察者接口
public interface Observer {
    void update(String object);
}
//观察者实现
public class ObServerA implements Observer {
    public void subscribe(Subject subject){
        subject.addObserver(this);
    }
    @Override
    public void update(String object) {
        System.out.println("收到信息message "+object);
    }
}
//主题接口
public interface Subject {
    void broadcast();
    void addObserver(Observer observer);
    void removeObserver(Observer observer);
}
//主题实现
public class SubjectA implements Subject{
    private String message;
    private List<Observer> observerList=new ArrayList<>();
    @Override
    public void broadcast() {
        for(Observer observerVar : observerList){
            observerVar.update(message);
        }
    }

    @Override
    public void addObserver(Observer observer) {
        observerList.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observerList.remove(observer);
    }
    public void setMessage(String var){
        this.message=var;
        broadcast();
    }
}
//客户端
public void client(){
        ObServerA observer=new ObServerA();
        Subject subject=new SubjectA();
        observer.subscribe(subject);
        ((SubjectA) subject).setMessage("123123");
    }
java api实现方式
@Getter
@ToString
public class SubjectJava extends Observable {
    private String message;

    public void setMessage(String var){
        message=var;
        setChanged();
        notifyObservers(message);
    }
}
public class ObserverJava implements Observer {
    @Override
    public void update(Observable o, Object arg) {
        System.out.println(o);
        System.out.println(arg);
    }
}
@Test
public void client2(){
    java.util.Observer observer=new ObserverJava();
    SubjectJava observable=new SubjectJava();
    observable.addObserver(observer);
    observable.setMessage("1111");
}
guava实现方式
public class ObserverGuava {
    @Subscribe
    public void upate(SubjectGuava subjectGuava){
        System.out.println(subjectGuava.getMessage());
    }
}
@Data
public class SubjectGuava {
    private String message;
}
@Test
public void client3(){
    EventBus eventBus=new EventBus();
    ObserverGuava observerGuava=new ObserverGuava();
    eventBus.register(observerGuava);
    SubjectGuava subjectGuava=new SubjectGuava();
    subjectGuava.setMessage("123123");
    eventBus.post(subjectGuava);
}
查看评论

浅谈为什么设计模式要有观察者模式--观察者模式的意义

设计模式可以说是一种代码规范,也可以说是一种前人总结的奇技淫巧,对于后来编程者,学习设计模式可以对编程思路有一些启发,其中也包括经验启发. php相对java形式比较随意,所以对于模式设计更需要多花时...
  • h330531987
  • h330531987
  • 2017-09-03 14:23:27
  • 768

原生JavaScript实现观察者模式

什么是观察者模式维基百科对观察者模式的定义如下: 观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察...
  • lm278858445
  • lm278858445
  • 2017-10-19 17:37:17
  • 1317

设计模式在游戏开发中的应用之观察者模式

观察者模式 1.通俗的定义         触发事件的一方不关心谁来处理,处理事件的一方不关心事件是从哪里来的。观察者模式就是让观察者与被观察者彻底解耦。 2.2.结构图如下(图片来源与网络): ...
  • yue19870813
  • yue19870813
  • 2016-11-12 16:44:28
  • 852

一个用观察者模式解决实际问题的例子

前几天组里接到一个以前开发的已上线项目的维护任务,要求把其中的一些数据定时通过webservice接口上传到当地某市某平台上面,基本上算是个体力活儿了。 时间仓促只好加班加点,搜集比对 -->拼写S...
  • u012763117
  • u012763117
  • 2014-03-09 02:31:39
  • 1556

设计模式之观察者模式与事件委托

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自己更新自己。         观察者结构模式图:     ...
  • wangdan199112
  • wangdan199112
  • 2014-02-16 21:36:55
  • 2374

观察者模式理解及demo

最近在学习响应式编程RxJava,RxAndroid ,他就是一种基于观察者模式的以实现更简洁的异步操作类库。 为更好了的理回顾解学习,先回顾一下观察者模式。 观察者模式是多中设计模式中的一种,主要包...
  • zhongguobaozi
  • zhongguobaozi
  • 2016-06-16 10:33:14
  • 635

观察者模式(这个用的太多了)

一.观察者模式的定义 定义对象间一种一对多的依赖关系,是的没当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。 二.观察者模式的使用场景 (1).关联行为场景,需要注意的是,关联行...
  • u011889786
  • u011889786
  • 2016-04-04 10:21:51
  • 981

设计模式(五)观察者模式

观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听莫一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们...
  • itachi85
  • itachi85
  • 2016-03-02 17:41:50
  • 43560

设计模式之观察者模式简单理解

本篇文章总结于马士兵的视频教程《观察者模式》。个人非常推荐马士兵的视频教程,对于初学Java的人来说,J2SE基础视频非常不错,对于内存分析讲的十分到位。对于有一定基础的人来说,设计模式系列,反射系列...
  • sundacheng1989
  • sundacheng1989
  • 2015-12-13 19:16:00
  • 2247

观察者模式(Observer Pattern)(二):HeadFirst中的气象站的实现

一、问题描述 Weather-O-Rama气象站计划建立下一代的Internet气象观察站,该气象站必须建立在WeatherData对象的基础上,WeatherData对象提供天气数据,有三...
  • jialinqiang
  • jialinqiang
  • 2013-05-11 08:51:08
  • 2291
    个人资料
    等级:
    访问量: 688
    积分: 81
    排名: 155万+
    文章存档