美文网首页
观察者模式

观察者模式

作者: nxiangbo | 来源:发表于2019-03-01 12:05 被阅读0次

    观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
    观察者提供了一种对象设计,让对象和观察者之间松耦合。

    image.png

    实例

    以微信用户订阅微信公众号为例,当微信公众号更新后,就会通知订阅该公众号的用户。此时,用户就是观察者,而公众号就是被观察者。

    image.png

    观察者,也就是用户

    public interface Observer {
         void update(String msg);
    }
    
    public class User implements Observer {
        private String name;
    
        public User(String name){
            this.name = name;
        }
        @Override
        public void update(String msg) {
            System.out.println("name="+name+"    msg="+msg);
        }
    }
    

    被观察者,也就是公众号

    public interface Observable {
        void register(Observer observer);
    
        void unregister(Observer observer);
    
        void notifyObservers(String msg);
    }
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class WechatSubject implements Observable
    {
        List<Observer> observerList = new ArrayList<>();
    
    
        @Override
        public void register(Observer observer) {
            observerList.add(observer);
        }
    
        @Override
        public void unregister(Observer observer) {
            observerList.remove(observer);
        }
    
        @Override
        public void notifyObservers(String msg) {
            for (Observer observer :observerList) {
                observer.update(msg);
            }
        }
    }
    

    测试代码

    public class Test {
        public static void main(String[] args) {
            User user1 = new User("jack");
            User user2 = new User("Cat");
    
            WechatSubject subject = new WechatSubject();
            subject.register(user1);
            subject.register(user2);
    
            subject.notifyObservers("公众号更新了");
        }
    }
    

    输出

    name=jack    msg=公众号更新了
    name=Cat    msg=公众号更新了
    

    相关文章

      网友评论

          本文标题:观察者模式

          本文链接:https://www.haomeiwen.com/subject/eifduqtx.html