码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-12-05 17:48:08      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:模式   ring   subject   public   动作   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();
    }
}

 

运行结果:

下订单了

 

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

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

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

标签:模式   ring   subject   public   动作   java   设计模式   观察者   状态改变   

原文地址:http://www.cnblogs.com/zhuxiansheng/p/7988020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!