观察者模式

作者: YoungerDev | 来源:发表于2018-04-07 17:00 被阅读77次

    Android进阶之设计模式

    观察者模式

    定义: 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新.

    使用场景:

    1. 关联行为场景. 需要注意的是,关联行为是可以拆分的,而不是"组合"关系.
    2. 事件多级触发场景.
    3. 跨系统的消息交换场景. 如消息队列,事件总线的处理机制.

    优点: 观察者和被观察者之间是抽象耦合,应对业务变化. 增强系统灵活性,可扩展性.

    缺点: 在使用时应该考虑一下开发效率和运行效率.程序中包含一个被观察者,多个观察者,开发和调试等内容会比较复杂,而且在 Java 中消息的通知默认是顺序执行的,一个观察者卡顿,会影响整体的执行效率,这种情况下,一般采用异步的方式.

    举个例子:

    
    //程序员是观察者
    public class Coder implements Observer {
        private String name;
    
        public Coder(String name) {
            this.name = name;
        }
    
        @Override
        public void update(Observable o, Object arg) {
            System.out.println("Hi, "+ name+", DEvTechFrontier 更新啦,内容是 "+arg);
        }
    
        @Override
        public String toString() {
            return "码农 : "+name;
        }
    }
    
    
    
    /**
     * DevTechFrontier 开发技术前线,这个网站就被观察者角色,当它更新时所有的
     * 观察者都会收到相应的通知.
     * */
    public class DevTechFrontier extends Observable{
    
        public void postNewFeed(String content){
            //标识状态或者内容发生变化.
            setChanged();
            //通知所有观察者
            notifyObservers(content);
        }
    }
    
    
     public static void main(String[] args) {
     
     
            //被观察者角色
            DevTechFrontier devTechFrontier = new DevTechFrontier();
    
            //观察者
    
            Coder mrsimple = new Coder("mr.simple");
            Coder coder1 = new Coder("code-1");
            Coder coder2 = new Coder("code-2");
            Coder coder3 = new Coder("code-3");
    
            devTechFrontier.addObserver(mrsimple);
            devTechFrontier.addObserver(coder1);
            devTechFrontier.addObserver(coder2);
            devTechFrontier.addObserver(coder3);
    
            devTechFrontier.postNewFeed("新一期的内容更新啦");
    }
    
    

    打印出来结果:

    Hi, code-3, DEvTechFrontier 更新啦,内容是 新一期的内容更新啦
    Hi, code-2, DEvTechFrontier 更新啦,内容是 新一期的内容更新啦
    Hi, code-1, DEvTechFrontier 更新啦,内容是 新一期的内容更新啦
    Hi, mr.simple, DEvTechFrontier 更新啦,内容是 新一期的内容更新啦
    
    

    能看出来通知顺序是,后添加进去的先通知到.

    相关文章

      网友评论

        本文标题:观察者模式

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