ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 低调看直播体育app软件下载 >> Android开发 >> java设计模式之观察者模式

java设计模式之观察者模式(1/2)

来源:网络整理     时间:2016-01-17     关键词:

本篇文章主要介绍了"java设计模式之观察者模式",主要涉及到方面的内容,对于Android开发感兴趣的同学可以参考一下: java设计模式之观察者模式:* 本文内容来自:Android源码设计模式解析与实战观察者模式的定义:观察者模式(observer pattern)又称为发布-...

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

* 本文内容来自:Android源码设计模式解析与实战

观察者模式的定义:

  • 观察者模式(observer pattern)又称为发布-订阅模式(publish/subscribe pattern),定义对象间一对多的依赖关系,使得每当一个对象改变时,则其所有依赖的对象都会得到通知并被自动更新.既然是一对多的关系,说明唯一的是被观察者,而观察者则可以有多种.

观察者模式使用场景:

  • 关联行为场景,关联行为是可拆分的,而不是”组合”关系
  • 事件多级触发的场景
  • 跨系统的消息交换场景,如消息队列,事件总线的处理机制

观察者模式的UML类图:

java设计模式之观察者模式

  • Subject:抽象主题,也就是被观察者(Observable),抽象主题角色把所有观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象.
  • ConcreteSubject: 具体主题,即具体的被观察者(ConcreateObsevable),在具体主题的内部状态改变时,给所有注册过的观察者发出通知.
  • Obsever: 抽象观察者,定义一个更新的接口,使得在得到主题改变的更新通知时更新自己
  • ConcreteObserver: 具体观察者,实现Observer接口,在得到通知时更新自己.

观察者实例的实现:

  • 抽象主题:
publicabstractclass Observable {      
            //最好使用线程安全的Vectorprivate List mObservers = new ArrayList<>();

            publicvoidattach(Observer observer) {
                if (!mObservers.contains(observer)) {
                    mObservers.add(observer);
                }
            }
            publicvoiddetach(Observer observer) {
                if (observer != null) {
                    mObservers.remove(observer);
                }
            }
            publicvoidnotifyObservers(String newStates) {
                for (Observer observer : mObservers) {
                    observer.update(newStates);
                }
            }
        }
  • 具体主题:
publicclassConcreteObservableextendsObservable {private String state;

            public String getState() {
                return state;
            }

            publicvoidchanged(String newState) {
                state = newState;
                Log.d("ConcreteObservable", "主题改变:" + state);
                notifyObservers(state);
            }
        }
  • 抽象观察者:
publicinterface Observer {
            void update(String state);
        }
  • 具体观察者:
publicclassConcreteObserverimplementsObserver {private String observerState;
            @Overridepublicvoidupdate(String state) {
                observerState = state;
                Log.d("ConcreteObserver", "状态为:" + observerState);
            }
        }
  • 客户端:
publicclass Client {
            publicstaticvoidmain(String[] args){
                ConcreteObservable observable= new ConcreteObservable();

                Observer observer= new ConcreteObserver();

                observable.attach(observer);

                observer.update("new state");
            }

        }

Android中观察者模式的编写:

相关图片

相关文章