观察者模式

设计模式之 — 观察者模式

1.观察者模式的基本构成:
观察者模式一般有四个部分组成:
(1).Subjcet —被观察者接口父类
(2).CSubject—具体被观察者 ---- (被观察者具体实现)
(3).Observer—观察者接口父类
(4).CObserver—具体观察者 ---- (观察者具体实现)
其中:被观察者的主要方法有: 增加,删除,通知
----------观察者的方法有: 更新

观察者模式

以下是java 实现观察者模式的demo;

观察者模式
1.被观察者接口父类:

/**
 * 被观察者父类(含有三个方法:1.增加 2.删除 3.通知观察者)
 */
public interface Subject {

    void addObserver(Observer observer);

    void deleteObserver(Observer observer);

    void notifyObserver();

}

2.具体被观察者,自身有个表演的动作:setAction

/**
 *  具体被观察者(具体实现)
 */

public class CSubject implements Subject {

    private List<Observer> observers = new ArrayList<>();

    @Override
    public void addObserver(Observer observer) {
            observers.add(observer);
    }

    @Override
    public void deleteObserver(Observer observer) {
           observers.remove(observer);
    }

    @Override
    public void notifyObserver() {
      //通知就是遍历一下观察者们,调用观察者的update就可以:

        for (Observer observer:observers){
            observer.update(action);
        }
    }

    //表演内容
    private String action;

    public void setAction(String action) {
        this.action = action;
    }
}

3.观察者接口父类

/**
 * 观察者模式 - 观察者接口父类
 */

public interface Observer {

    void update(Object o);

}

4.具体观察者

public class C1Observer implements Observer{

    //观察者1---实时观察
    @Override
    public void update(Object o) {
        System.out.println(this.getClass().toString()+"观察到-->"+o.toString());
    }

}
public class C2Observer implements Observer {

    //观察者2---实时观察
    @Override
    public void update(Object o) {
        System.out.println(this.getClass().toString() + "观察到-->"+o.toString());
    }

}

5.运行结果:


public class ObserverTest {

    public static void main(String[] args) {
        //创建观察者:
        Observer observer1 = new C1Observer();
        Observer observer2 = new C2Observer();

        //创建被观察者:
        CSubject subject = new CSubject();

        //被观察者 添加 观察者

        subject.addObserver(observer1);
        subject.addObserver(observer2);


        //被观察者开始表演

        subject.setAction("我表演了");
        subject.notifyObserver();


    }
}
  1. class com.example.myapplication.observer.C1Observer观察到–>我表演了
    class com.example.myapplication.observer.C2Observer观察到–>我表演了
上一篇:11.7luffycity项目(2)


下一篇:小白也能看懂的REDIS教学基础篇——做一个时间窗限流就是这么简单