zoukankan      html  css  js  c++  java
  • 对象行为型

    介绍

    观察者模式实质就是定义对象与依赖(对象)之前的关系(一对多),使得如果当前对象自身发生改变时,就可以自动通知其依赖(对象)让其发生改变
    

    使用场景

    消息队列(跨系统信息交互)
    

    角色

    Subject:抽象主题(被观察者)
    ConcreteSubject:抽象主题的实现(被观察者)
    Observer:观察者接口
    ConcreteObserver:观察者接口实现(观察者)
    

    入门案例:

    UML图解:

    代码:

    [Subject]

    //主题
    public abstract class Subject {
    
        //观察者集合
        private List<Observer> observers = new ArrayList<>();
    
        //添加观察者
        public void attach(Observer observer){
            observers.add(observer);
        }
    
        //移除观察者
        public void detach(Observer observer){
            observers.remove(observer);
        }
    
        //通知观察者
        public void Notify(){
            for (Observer observer : observers) {
                observer.update();
            }
        }
    
    }
    

    [ConcreteSubject]

    //具体的主题
    public class MomSubject extends Subject {
    
        //主题消息
        private String msg;
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }
    
    

    [Observer]

    public interface Observer {
        void update();
    }
    
    

    [ConcreteObserver]

    //具体的观察者
    public class Son implements Observer {
    
        //名字
        private String name;
        //观察的主题
        private MomSubject subject;
    
        public Son(String name, MomSubject subject) {
            this.name = name;
            this.subject = subject;
        }
    
        @Override
        public void update() {
            System.out.println(name + "..." + subject.getMsg());
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Subject getSubject() {
            return subject;
        }
    
        public void setSubject(MomSubject subject) {
            this.subject = subject;
        }
    }
    

    测试

    public class Main {
        public static void main(String[] args){
            
            //创建主题
            MomSubject subject = new MomSubject();
    
            //设置观察该主题的观察者
            subject.attach(new Son("小强", subject));
            subject.attach(new Son("小红", subject));
    
            //设置通知信息
            subject.setMsg("吃饭了"); //变动处;做到当主题的msg属性发生改变时,依赖就随之发送变动
    
            //通知观察者更新信息
            subject.Notify();
    
            /**
             * output:
             *  小强...吃饭了
                小红...吃饭了
             */
    
        }
    }
    
    
  • 相关阅读:
    服务器raid故障恢复数据过程
    HP FC MSA2000服务器磁盘掉线数据恢复案例
    服务器存储共享文件夹丢失数据恢复检测报告
    Hp DL380服务器瘫痪如何恢复服务器数据【多图】
    服务器存储瘫痪导致大量虚拟机丢失恢复数据过程
    华为5800服务器raid阵列数据恢复成功案例
    IBM X3850服务器虚误删除虚拟机如何恢复数据
    orcale数据库基本操作
    2、HTML基础知识
    1、web前端的发展
  • 原文地址:https://www.cnblogs.com/tandi19960505/p/8271444.html
Copyright © 2011-2022 走看看