美文网首页
观察者设计模式

观察者设计模式

作者: xuxhing | 来源:发表于2019-03-13 21:59 被阅读0次

    一、模式定义

    定义对象间的一种一对多的关系,当一个对象的状态发生改变时,所依赖于它的对象都得到通知并被自动更新。

    二、模式类图

    观察者模式.png

    三、示例代码

    public interface Observer {
        public void update(Subject subject);
    }
    
    public interface Subject {
    
        public void attach(Observer observer);
    
        public void detach(Observer observer);
    
        public void notifyObservers();
    }
    
    public class ConcreteSubject implements Subejct {
    
        private List<Observer> observers = new ArrayList<Observer>();
    
        public void attach(Observer observer) {
            this.observers.add(observer);
        }
    
        public void detach(Observer observer) {
            this.observers.remove(observer);
        }
    
        protected void notifyObservers() {
            for (Observer observer : this.observers) {
                observer.update(this);
            }
        }
    }
    
    public class Publisher extends Subject {
    
        private String state;
    
        public String getState() {
            return this.state;
        }
    
        public void setState(String state) {
            this.state = state;
            this.notifyObservers();
        }
    }
    

    四、何时选用

    • 当一个抽象模型有两个方面,其中一个方面的操作依赖于另一个方面的状态变化,那么就可以选用观察者模式,将这两者封装成观察者和目标对象,当目标对象变化的时个, 依赖于它的观察者对象也会发生相应的变化。这样就把抽象模型的这两个方面离开了,使得它们可以独立地改变和复用。

    • 如果在更改一个对象的时候,需要同时连带改变其他的对象,而且不知道究竟应该有多少对象需要连带改变,这种情况可以选用观察者模式,被更改的那一个对象很明显就相当于是目标对象,而需要连带修改的多个其它对象,就作为多个观察者对象。

    • 当一个对象必须通知其它的对象,但是你又希望这个对象和其它的被它通知的对象是松散耦合的。也就是说这个对象其实不想知道具体被通知的对象。这种情况可以选用观察模式,这个对象就相当于是目标对象,而被它通知就是对察者对象了。

    相关文章

      网友评论

          本文标题:观察者设计模式

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