Android设计模式之观察者模式

观察者模式

1.定义:

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态时,则所有依赖它的对象都会得到通知,并自动更新。

2.使用场景:

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

3.UML图

Android设计模式之观察者模式_第1张图片

4.详解:

观察者模式又称为发布-订阅模式,是一种使用频率非常高的设计模式,它常用的地方是GUI系统,订阅-发布系统,是一种行为型设计模式。观察者模式的主要作用是使得对象解耦,将观察者与被观察者完全隔离,仅依赖于Observer接口与Observable类。

  • 优点:观察者与被观察者之间是抽象耦合,应对业务变化;增强系统灵活性、可扩展性。
  • 缺点:在应用观察者模式时需要考虑开发效率和运行效率的问题,程序中包括一个被观察者、多个观察者、开发和调试等内容会比较复杂,而且在java中消息的通知默认是顺序执行,一旦某个观察者卡顿,会影响整体的执行效率,在这种情况下,一般考虑采用异步的方式。
    下面就以程序猿订阅某网站的内容举例,详见代码:
public static class Coder implements Observer {
        private String name;

        public Coder(String name) {
            this.name = name;
        }

        @Override
        public void update(Observable o, Object arg) {
            System.out.println("Hi," + name + ",你订阅的Android前沿技术有最新发布,内容:" + arg.toString() + ",请前往查看!");
        }
    }

这里定义了订阅者的实现类Coder,它实现Observer接口,并重写update方法。
接着是发布者的具体类,它继承Observable即可,至于更新方法可自定义,这里是notice:

public static class Publisher extends Observable {
        public void notice(String content) {
            setChanged();//标识状态或内容发生改变
            notifyObservers(content);//通知所有订阅者
        }
    }

测试代码:

public static void main(String[] args) {
        Publisher publisher = new Publisher();//创建发布者
        Coder coder_a = new Coder("coder_A");//创建订阅者
        Coder coder_b = new Coder("coder_B");
        Coder coder_c = new Coder("coder_C");
        publisher.addObserver(coder_a);//将订阅者注册到发布列表中
        publisher.addObserver(coder_b);
        publisher.addObserver(coder_c);
        publisher.notice("Android注解annotation");//发布消息
        /**
         Hi,coder_C,你订阅的Android前沿技术有最新发布,内容:Android注解annotation,请前往查看!
         Hi,coder_B,你订阅的Android前沿技术有最新发布,内容:Android注解annotation,请前往查看!
         Hi,coder_A,你订阅的Android前沿技术有最新发布,内容:Android注解annotation,请前往查看!
         */
    }

5.代码托管地址

观察者模式

你可能感兴趣的:(Android设计模式之观察者模式)