ITPub博客

首页 > IT职业 > IT职场 > 观察者模式 JAVA实现

观察者模式 JAVA实现

IT职场 作者:shinez 时间:2021-09-09 08:57:49 0 删除 编辑
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 被观察对象
     */
    class ObservedObject {
        // 定义观察者的对象容器
        protected List observers = new ArrayList();
        // 实现构造方法
        public ObservedObject() {
        }
        // 实现观察者的增添方法
        public void add(Observer observer) {
            if (observer == null) {
                throw new NullPointerException();
            }
            observers.add(observer);
        }
        // 实现观察者删除方法
        public void remove(Observer observer) {
            if (observer == null) {
                return;
            }
            observers.remove(observer);
        }
        // 实现删除所有观察者的方法
        public void removeAll() {
            observers.clear();
        }
    }
    /**
     * 观察者接口
     */
    interface Observer {
        // 继承Observer的类需要实现update方法
        void update(ObservedObject obj);
    }
    /**
     * 被观察者具体实现
     */
    class ConcreteObject extends ObservedObject {
        private String info;
        public String getInfo() {
            return info;
        }
        public void setInfo(String info) {
            this.info = info;
            for (Observer observer : observers) {
                observer.update(this);
            }
        }
    }
    /**
     * 观察者具体实现
     */
    class ConcreteObserver implements Observer {
        private String name;
        public ConcreteObserver(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
        @Override
        public void update(ObservedObject obj) {
            System.out.println(name + "先生您好,您的最新消息更新如下:n" + ((ConcreteObject)obj).getInfo());
        }
    }
    /**
     * 主类,用于测试
     */
    public class Main {
        public static void main(String[] args) {
            // 创建被观察的对象
            ConcreteObject observer = new ConcreteObject();
            // 创建四个观察者对象
            ConcreteObserver obja = new ConcreteObserver("张三丰");
            ConcreteObserver objb = new ConcreteObserver("麻师娘");
            ConcreteObserver objc = new ConcreteObserver("李小龙");
            ConcreteObserver objd = new ConcreteObserver("太上老君");
            // 将观察者加入被观察的对象列表
            observer.add(obja);
            observer.add(objb);
            observer.add(objc);
            observer.add(objd);
            //更新被观察者的相关信息
            observer.setInfo("今天天气晴朗,蓝天白云,适合外出,可以带上你们的情侣出门游玩哦!");
        }
    }

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3127/viewspace-2798254/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-30

  • 博文量
    0
  • 访问量
    932