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
  • 相关阅读:
    java.io.IOException: HTTPS hostname wrong: should be 规格严格
    linux syslog 规格严格
    SVN,HG,GIT 命令说明 规格严格
    pclose : no child process 规格严格
    使用NetBeans6开发OSGi应用(1)——FirstOSGi[88250原创]
    Netbeans大战Eclipse 谁将走向祭坛?
    XP中的重要惯例和规则
    使用NetBeans6开发OSGi应用(1)——FirstOSGi[88250原创]
    简简单单删除所有.svn目录
    简简单单删除所有.svn目录
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4381136.html
Copyright © 2011-2022 走看看