zoukankan      html  css  js  c++  java
  • 设计模式开始--观察者模式

    观察者模式

    一、问题:定义了一个一对多的依赖关系,让多个观察者同时监听一个主题对象,当主题对象发生变化时候,会通知到所有的观察者对象

    二、作用:当一个对象变化需要同时改变其他对象的时候

    三、类图

    (1)推的形式

    (2)拉的形式

    四、实现

    (1)抽象主题类

    public interface ISubject {
        public void register(IObserver observer);
        public void unregister(IObserver observer);
        public void notifyObservers();
    }
    View Code

    (2)具体主题类

    public class Subject implements ISubject {
        private Vector<IObserver> vec = new Vector<IObserver>();
        private String data;
        public String getData()
        {    
            return data;
        }
        public void setData(String data)
        {
            this.data = data;
        }
        @Override
        public void register(IObserver observer) {
            vec.add(observer);
        }
        @Override
        public void unregister(IObserver observer) {
            if(vec.contains(observer))
                vec.remove(observer);
        }
        @Override
        public void notifyObservers() {
            for(int i = 0; i < vec.size(); i++)
            {
                vec.get(i).refresh(this);
            }
        }
    }
    View Code

    (3)抽象观察者类

    public interface IObserver {
        public void refresh(ISubject subject);
    }
    View Code

    (4)具体观察者类

    public class Observer implements IObserver {
        @Override
        public void refresh(ISubject subject) {
            Subject sub = (Subject)subject;
            System.out.println(sub.getData());
        }
    }
    View Code

    (5)用户类测试类

    public class Client {
        public static void main(String[] args) {
            Subject subject = new Subject();
            IObserver one = new Observer();
            IObserver two = new Observer();
            subject.register(one);
            subject.register(two);
            subject.setData("hello world");
            subject.notifyObservers();
        }
    }
    View Code
  • 相关阅读:
    linux grep --我最喜欢的命令~~
    svmrank 的误差惩罚因子c选择 经验
    转:机器学习中的算法(2)-支持向量机(SVM)基础
    转:关于python文件操作大全
    python 求两个时间差
    多个excel合并(excel2007)
    oracle12c 新建表空间
    数据库表被锁了
    join ,left join ,right join有什么区别
    最简洁的权限(菜单)控制
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4381136.html
Copyright © 2011-2022 走看看