• 设计模式之观察者模式


    观察者模式

    定义一种一对多的依赖关系,让多个观察对象同时监听某一主题对象。这个主题对象在状态发生变化时会通知所有的观察者对象,使他们自动更新状态

    Subject

    package com.hml.observer;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public  class Subject {
        List<Observer> observers = new ArrayList<Observer>();
        
        public void addObserver(Observer o) {
            observers.add(o);
        }
        
        public void deleteObserver(Observer o) {
            observers.remove(o);
        }
        
        public void notifyChange() {
            for (Observer o : observers) {
                o.update();
            }
        }
    }

    Observer

    package com.hml.observer;
    
    public interface Observer {
        public void update();
    }

    ConcreateObserverA

    package com.hml.observer;
    
    public class ConcreateObserverA implements Observer {
    
        public void update() {
            System.out.println("A update");
        }
    
    }

    ConcreateObserverB

    package com.hml.observer;
    
    public class ConcreateObserverB implements Observer {
    
        public void update() {
            System.out.println("B update");
        }
    
    }

    Test

    package com.hml.observer;
    public class Test {
        public static void main(String[] args) {
            Subject subject = new Subject();
            subject.addObserver(new ConcreateObserverA());
            subject.addObserver(new ConcreateObserverB());
            subject.notifyChange();
        }
    }

    类图

    将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维护一致性而使各个类紧密耦合,这样会给维护、扩展和重用带来不便。而观察者模式的关键是主题Subject和观察者Observer,一个Subject可以有人以数量的依赖它的Observer,一旦Subject的状态发生了变化,所有的Observer都可以得到通知。Subject发出通知并不需要知道谁是他的观察者,也就是说,具体观察者是谁,他根本不需要知道。而任何一个具体的观察者都不知道也不需要知道其他观察者的存在。因此当一个对象的改变需要同时改变其他的对象时,就可以使用观察者模式。

  • 相关阅读:
    第十五周翻译
    数据库 第十五周学习笔记
    第十四周学习笔记
    SQL Server安全级别2的楼梯:身份验证
    第十三周学习笔记
    第十三周翻译:SQL Server的安全1级楼梯:SQL Server安全概述
    MySQL修改默认存储引擎(转)
    【整理】MySQL引擎(转)
    合理配置MySQL缓存 提高缓存命中率(转)
    MySQL数据库分区的概念与2大好处
  • 原文地址:https://www.cnblogs.com/heml/p/4625510.html
Copyright © 2020-2023  润新知