美文网首页
观察者模式

观察者模式

作者: 守住阳光 | 来源:发表于2018-07-05 18:50 被阅读0次

一、概念

        观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

二、UML类图

三、基本代码实现

1、Subject类

public abstract class Subject {

        private Listobservers = new ArrayList ();

        public void attach(Observer observer){

                observers.add(observer);

        }

        public void detach(Observer observer){

                observers.remove(observer);

        }

        public void inform(){

                for(Observer observer :observers ){

                    observer.update();

                }

        }

}

2、ConcreteSubject,保存状态信息,在状态发生变化时,给所有登记过的观察者发出通知

public class ConcreteSubject extends Subject {

        private String subjectState;

        public String getSubjectState() {

                return subjectState;

        }

        public void setSubjectState(String subjectState) {

                this.subjectState = subjectState;

        }

}

3、Observer,抽象观察者

public abstract class Observer {

         public abstract void update();

}

4、ConcreteObserver,具体观察者

public class ConcreteObserver extends Observer{

        private String name ;

        private String oberserState;

        private ConcreteSubject subject;

        public ConcreteObserver(ConcreteSubject subject , String name){

                    this.subject = subject;

                    this.name = name ;

        }

        @Override

        public void update() {

                    this.oberserState = subject.getSubjectState();

                    System.out.println("观察者的新状态是" + name + oberserState);

        }

}

5、测试类

public class Main {

        public static void main(String[] args) {

                ConcreteSubject s = new ConcreteSubject();

                s.attach(new ConcreteObserver(s , "观察者1"));

                s.attach(new ConcreteObserver(s , "观察者2"));

                s.attach(new ConcreteObserver(s , "观察者3"));

                s.setSubjectState("111111");

        }

}

四、总结

        将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维护一致性而使各类紧密耦合,这样会给维护、扩展和重用带来不方便。而观察者模式的关键对象是主题和观察者,一个主题可以有任意数量的依赖他的观察者,一旦主题状态发生改变,所有的观察者都可以得到通知。主题对象发出通知时,不需要知道谁是它的观察者,也就是说,具体观察者是谁,它根本不需要知道。而任何一个具体观察者也不需要知道其他观察者的存在。

        也就是说当一个对象的改变需要同时改变其他对象,而且它不知道具体有多少对象需要改变时,应该考虑观察者模式。

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

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

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

      本文链接:https://www.haomeiwen.com/subject/eoopuftx.html