继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

观察者模式 JAVA实现

慕雪芸茗
关注TA
已关注
手记 13
粉丝 66
获赞 479
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 被观察对象
     */
    class ObservedObject {
        // 定义观察者的对象容器
        protected List<Observer> 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("今天天气晴朗,蓝天白云,适合外出,可以带上你们的情侣出门游玩哦!");
        }
    }
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP