• java 之 观察者模式(大话设计模式)


    观察者模式,笔者以前做校验订单时用过一次,只是不知道有这个模式,当时使用观察者省略了N多if else

    在笔者看来观察者模式比较试用于一个对象状态改变后,很多个对象也要根据这个状态做相应的动作,当然观察者模式只是给大家开了一扇门,更希望的是灵活运用,而不是拘泥于细节,

    我们可以从中汲取到把实现相同接口的类来放到集合里,然后便利集合调取公共方法去完成相应的工作,先看下类图

    大话设计模式-类图

    基于类图笔者写了如下的简单的实例。

    /**
     * 通知者抽象接口
     */
    public interface INotify {
    
        public void notifySub();
    
        public void addSub(ISubject subject);
    
        public void removeSub(ISubject subject);
    }
    /**
     * 观察者抽象接口
     */
    public interface ISubject {
    
        public void updateState(String state);
    }
    /**
     * 具体通知者
     */
    public class Notify implements INotify {
    
        private List<ISubject> subjects = new ArrayList<>();
    
        @Override
        public void addSub(ISubject subject) {
            subjects.add(subject);
        }
    
        @Override
        public void removeSub(ISubject subject) {
            subjects.remove(subject);
        }
    
        @Override
        public void notifySub() {
            for (ISubject subject : subjects) {
                subject.updateState("下订单了");
            }
        }
    }
    /**
     * 具体观察者
     */
    public class Subject implements ISubject {
    
        @Override
        public void updateState(String state) {
            System.out.println(state);
        }
    }
    /**
     * 客户端
     */
    public class Test {
    
        public static void main(String[] args) {
            INotify notify = new Notify();
            notify.addSub(new Subject());
            notify.notifySub();
        }
    }

    运行结果:

    下订单了

    设计模式,能够优化我们的代码,解耦,易扩展,易维护,不过如果不能够理解设计模式的精髓所在,生搬硬套可能收不到理想的效果。

    笔者认为,吸取设计模式的思想才是学习的关键。以上是笔者对观察者的理解,希望能帮助学习的小伙伴!

  • 相关阅读:
    [ solr入门 ] 在schema.xml中加入自己的分词工具
    SQLServer2005获取大数据集时内存不足的解决办法[转]
    java位操作基本教程[转]
    log4j的最佳实践(转)
    [ lucene扩展 ] "Did you mean" feature with Apache Lucene SpellChecker
    java image filters[02]过滤器初探
    PHP serialize 和 JSON 解析与区别
    js 实现 静态缓存页面中访问动态IP下载地址
    smarty section foreach遍历多维数组
    【转】window.open 参数
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/7988020.html
Copyright © 2020-2023  润新知