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();
    }
}

 

运行结果:

下订单了

 

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

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

posted @ 2017-12-05 16:42  红尾巴的猪  阅读(374)  评论(1编辑  收藏  举报