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(); } }
运行结果:
下订单了
设计模式,能够优化我们的代码,解耦,易扩展,易维护,不过如果不能够理解设计模式的精髓所在,生搬硬套可能收不到理想的效果。
笔者认为,吸取设计模式的思想才是学习的关键。以上是笔者对观察者的理解,希望能帮助学习的小伙伴!