Android 高级进阶Android框架/设计模式Android设计模式

Android 设计模式-观察者模式 (Observer Pat

2018-04-16  本文已影响16人  Code猎人

定义

定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish-Subscribe)模式、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式或从属者(Dependents)模式。

模式结构

观察者模式包含如下角色:

UML图

ObserverUML.png

代码实现

Subject.java

/**
* 抽象目标者
*/
public abstract class Subject {

// 保存注册的观察者对象
private List<Observer> mObservers = new ArrayList<>();

//注册观察者对象
public void attach(Observer observer) {
    mObservers.add(observer);
    System.out.println("Attached an observer");
}

//注销观察者对象
public void detach(Observer observer) {
    mObservers.remove(observer);
}

// 通知所有注册的观察者对象
public void nodifyObservers(String newState) {
    for (Observer observer : mObservers) {
        observer.update(newState);
    }
}
}

ConcreteSubject.java

  /**
  * 具体目标者
 */
public class ConcreteSubject extends Subject {

private String state;

public String getState() {
    return state;
}

public void change(String newState) {
    state = newState;
    System.out.println("ConcreteSubject State:" + state);

    //状态发生改变,通知观察者
    nodifyObservers(state);
}
}

Observer.java

/**
* 观察者
*/
public interface Observer {

void update(String state);
}

ConcreteObserver.java

 /**
*具体观察者
*/
public class ConcreteObserver implements Observer {

// 观察者状态
private String observerState;

@Override
public void update(String state) {
    // 更新观察者状态,让它与目标状态一致
    observerState = state;
    System.out.println("ConcreteObserver State :" + observerState);
}
}

test

public class MyClass {

public static void main(String[] args) {
    // 创建目标对象
    ConcreteSubject concreteSubject = new ConcreteSubject();
    // 创建观察者对象
    Observer observer = new ConcreteObserver();
    // 将观察者对象注册到目标对象上
    concreteSubject.attach(observer);
    // 改变目标对象的状态
    concreteSubject.change("I change");
}
}

运行结果

模式分析

观察模式的优点

观察模式的缺点


点赞加关注是给我最大的鼓励!

上一篇下一篇

猜你喜欢

热点阅读