美文网首页
观察者模式

观察者模式

作者: Anne_胖达 | 来源:发表于2019-10-29 19:48 被阅读0次

观察者模式

定义:当对象间存在一对多关系时,则使用观察者模式。
当一个对象(被观察者)被修改时,则会通知它的依赖对象更新。

//观察者
public interface Observer<T> {
    public void update(T t);
}
//被观察者
public interface Observable {
    public void subscribe(Observer observer);
    public void unsubscribe(Observer observer);
    public void notifyUpdate();
}
public class SecurityGuards implements Observer<Integer> {
    @Override
    public void update(Integer integer) {
        int currentMemory = integer.intValue();
        int memory = ComputerData.MEMORY - currentMemory;
        if (memory <= ComputerData.LOW_MEMORY){
            System.out.println("SecurityGuards:系统内存使用紧张,请关闭一些应用释放内存!");
        }else if (memory <= ComputerData.NORMAL_MEMORY){
            System.out.println("SecurityGuards:系统运行很正常!");
        }else if (memory <= ComputerData.MEMORY){
            System.out.println("SecurityGuards:系统运行十分流畅!");
        }
    }
}
public class QQSecurityGuards implements Observer<Integer>{
    @Override
    public void update(Integer integer) {
        int currentMemory = integer.intValue();
        int memory = ComputerData.MEMORY - currentMemory;
        if (memory <= ComputerData.LOW_MEMORY){
            System.out.println("QQSecurityGuards:内存不足,当前可用内存为" + memory + "MB,请关闭一些应用释放内存!");
        }else if (memory <= ComputerData.NORMAL_MEMORY){
            System.out.println("QQSecurityGuards:内存使用正常,当前可用内存为" + memory + "MB");
        }else if (memory <= ComputerData.MEMORY){
            System.out.println("QQSecurityGuards:系统运行十分流畅,当前可用内存为" + memory + "MB");
        }
    }
}
public class ComputerData {
    private ComputerData(){
        throw new IllegalStateException();
    }

    public static final int MEMORY = 4096;
    public static final int LOW_MEMORY = 512;
    public static final int NORMAL_MEMORY = 2048;
}
public class Computer implements Observable {
    private List<Observer> list;
    private int memory;

    public Computer(){
        list = new ArrayList<>();
    }

    @Override
    public void subscribe(Observer observer) {
        list.add(observer);
    }

    @Override
    public void unsubscribe(Observer observer) {
        list.remove(observer);
    }

    @Override
    public void notifyUpdate() {
        for (Observer observer : list){
            observer.update(memory);
        }
    }

    public void setMemory(int memory) {
        this.memory = memory;
    }

    public void install(Observer observer){
        subscribe(observer);
    }

    public void uninstall(Observer observer){
        unsubscribe(observer);
    }
}
public class Action {
    public static void main(String[] args){
        SecurityGuards guards = new SecurityGuards();
        QQSecurityGuards securityGuards = new QQSecurityGuards();
        Computer computer = new Computer();
        computer.install(guards);
        computer.install(securityGuards);
        int currentMemory = new Random().nextInt(4096);
        computer.setMemory(currentMemory);
        computer.notifyUpdate();
        computer.uninstall(guards);
        computer.uninstall(securityGuards);
    }
}

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

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