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

2018-01-17  本文已影响0人  _Mocuishle

初步认知

观察者模式:是一种单项的发布/订阅的广播模式。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。

简易架构

观察者模式

实例分析

观察者接口:

public interface Observe {

public void invoke(String message);

}

两个观察者实现类:

public class ObserveImpl1implements Observe {

@Override

    public void invoke(String message) {

System.out.println("ObserveImpl1 is executing now!the message is :"+message);

    }

}


public class ObserveImpl2implements Observe {

@Override

    public void invoke(String message) {

System.out.println("ObserveImpl2 is executing now,the message is :"+message);

    }

}

发布者接口:

public interface Publish {

/* *

添加观察者

*/

    public void add(Observe obv);

    /* *

删除观察者

*/

    public void del(Observe obv);

    /**

*通知所有观察者

*/

    public void notifyAllObverves(String notifyMessage);

    /**

* 自身操作方法

*/

    public void epration(String messge);

}

发布者抽象类:

/**

* 此抽象类主要用于对观察者进行管理

*/

public abstract class PublishImplimplements Publish

{

//在发布者中心的观察者管理列表

    private Vectorobserves =new Vector();

    /**

* 添加观察者

    * @param obv

    */

    @Override

    public void add(Observe obv) {

observes.add(obv);

    }

/**

* 删除观察者

    * @param obv

    */

    @Override

    public void del(Observe obv) {

observes.remove(obv);

    }

/**

* 给所有观察者发布通知

    * @param notifyMessage

    */

    @Override

    public void notifyAllObverves(String notifyMessage) {

Enumeration  elements =observes.elements();

      while(elements.hasMoreElements()){

elements.nextElement().invoke(notifyMessage);

      }

}

}

发布者实现类:

public class MyPublishextends PublishImpl {

@Override

    public void epration(String messge) {

System.out.println("the operation method is starting now!");

        notifyAllObverves(messge);

    }

}

观察模式测试类:

public class TestOfObserve {

public static void main(String[] args) {

Observe ob1 =new ObserveImpl1();

        Observe ob2 =new ObserveImpl2();

        MyPublish publish =new MyPublish();

        publish.add(ob1);

        publish.add(ob2);

        System.out.println("model of observe start now!");

        /**

* 发送第一个通知

*/

        String first ="天亦有情天亦老";

        publish.epration(first);

        /**

* 发送第二个通知

*/

        String second ="人间正道是沧桑";

        publish.epration(second);

    }

}

执行结果

model of observe start now!

the operation method is starting now!

ObserveImpl1 is executing now!the message is :天亦有情天亦老

ObserveImpl2 is executing now,the message is :天亦有情天亦老

the operation method is starting now!

ObserveImpl1 is executing now!the message is :人间正道是沧桑

ObserveImpl2 is executing now,the message is :人间正道是沧桑

总结

一个发布者发布了两次通知,两个观察者都实时接收到了相应的通知信息并且随着通知的变化进行实时的响应。

这种模式观察者必须注册到发布者管理中心,由发布者中心统一管理(维护所有观察者,也就是增删改查等以及发布通知操作)

这种模式在程序设计实践中适合横向的切面操作。

上一篇下一篇

猜你喜欢

热点阅读