zoukankan      html  css  js  c++  java
  • 设计模式之观察者模式详解

    观察者模式又称为发布-订阅模式,涉及的角色有:

      ●  抽象主题

      ●  具体主题

      ●  抽象观察者

      ●  具体观察者

    案例演示:公司发放工资的时候通知所有观察者工资已发放。

    /**
     * 抽象观察者
     */
    public interface IWatcher {
        
        public void getNotice(String str);
    }
    /**
     * 抽象主题:工资接口
     */
    public interface ISalary {
        
        public void addWatcher(IWatcher watcher);
        
        public void removeWatcher(IWatcher watcher);
        
        public void notifyAll(String str);
    }
    /**
     * 具体观察者:员工
     */
    public class Emp implements IWatcher {
    
        @Override
        public void getNotice(String str) {
            
            System.out.println("员工" + str);
        }
    
    }
    /**
     * 具体观察者:经理
     */
    public class Manager implements IWatcher {
    
        @Override
        public void getNotice(String str) {
            
            System.out.println("经理" + str);
        }
    
    }
    /**
     * 具体主题:工资
     */
    public class Salary implements ISalary {
    
        //存放观察者:员工
        private List<IWatcher> watcherList = new ArrayList<IWatcher>();
        
        @Override
        public void addWatcher(IWatcher watcher) {
            watcherList.add(watcher);
    
        }
    
        @Override
        public void removeWatcher(IWatcher watcher) {
            watcherList.remove(watcher);
    
        }
    
        @Override
        public void notifyAll(String str) {
            for (IWatcher watcher: watcherList) {
                watcher.getNotice(str);
            }
        }
    }
    /**
     * 测试类
     */
    public class Test {
    
        public static void main(String[] args) {
            
            //工资
            ISalary salary = new Salary();
            //员工
            IWatcher emp = new Emp();
            //经理
            IWatcher manager = new Manager();
            
            //添加观察者
            salary.addWatcher(emp);
            salary.addWatcher(manager);
            
            salary.notifyAll("发工资了!");
        }
    }

    测试结果如下:

  • 相关阅读:
    数学建模课程常用英语词汇(专业术语)
    MATLAB简易画图
    MATLAB与C语言对比实例:随机数生成
    C语言 投票系统:给定候选人,从键盘输入候选人的名字,统计票数,并输出最终获胜者
    C语言 一个数学问题:求s=(a^m)!+(b^n)!
    C语言 矩阵的转置及矩阵的乘法
    iOS_数据存取(二)
    iOS_数据存取(一)
    iOS_SDWebImage框架分析
    iOS_AFNetWorking框架分析
  • 原文地址:https://www.cnblogs.com/lingluo2017/p/7207173.html
Copyright © 2011-2022 走看看