美文网首页技术栈
2019-03-03——设计模式 观察者模式

2019-03-03——设计模式 观察者模式

作者: 烟雨乱平生 | 来源:发表于2019-03-03 17:36 被阅读0次

    特点

    多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。

    主要角色

    • 抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。
    • 具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。
    • 抽象观察者(Observer)角色:它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。
    • 具体观察者(Concrete Observer)角色:实现抽象观察者中定义的抽象方法,以便在得到目标的更改通知时更新自身的状态。

    实现

    public abstract class Subject {
        protected List<Observer> observers = new ArrayList<>();
        public void addObserver(Observer observer){
            observers.add(observer);
        }
        public void removeObserver(Observer observer){
            observers.remove(observer);
        }
        public void notifyAllObservers(){
            for (Observer observer:observers){
                observer.action();
            }
        }
    
        public abstract void execute();
    }
    
    
    public class ConcreteSubject extends Subject{
        @Override
        public void execute() {
            System.out.println("执行事件");
            notifyAllObservers();
        }
    }
    
    
    public interface Observer {
        void action();
    }
    
    
    public class ObserverA implements Observer{
        @Override
        public void action() {
            System.out.println("A已收到消息");
        }
    }
    
    
    
    public class ObserverB implements Observer{
        @Override
        public void action() {
            System.out.println("B已收到消息");
        }
    }
    

    相关文章

      网友评论

        本文标题:2019-03-03——设计模式 观察者模式

        本文链接:https://www.haomeiwen.com/subject/iwhmuqtx.html