行为型的设计模式 - Oberver(观察者模式)
一般常见的观察者模式如:报纸订阅。
在web应用中的电商最常见的莫过于物流接口,如快递100收费版--主动推送。
出版者+订阅者=观察者
下见2个接口,
1、Subject(主题接口)
method:
register() --用于注册订阅者
remove() --用于解除订阅者
notifyMessage() --用于通知订阅者消息
2、Observer(订阅者)
method:
update() --让主题接口方法notifyMessage调用
下详见类代码:
package top.gabin.oa.web.design; import java.util.Observable; import java.util.Observer; /** * 京东订阅者 * @author linjiabin on 16/4/29 */ public class JingdongObserver implements Observer { @Override public void update(Observable o, Object arg) { System.out.print("I‘m 京东"); System.out.println(arg); } }
package top.gabin.oa.web.design; import java.util.Observable; import java.util.Observer; /** * 淘宝订阅者 * @author linjiabin on 16/4/29 */ public class TaobaoObserver implements Observer { @Override public void update(Observable o, Object arg) { System.out.print("I‘m 淘宝"); System.out.println(arg); } }
package top.gabin.oa.web.design; import java.util.Observable; import java.util.Observer; /** * 快递100,物流主题 * @author linjiabin on 16/4/29 */ public class Kuaidi100Subject extends Observable { @Override public synchronized void addObserver(Observer o) { super.addObserver(o); } @Override public synchronized void deleteObserver(Observer o) { super.deleteObserver(o); } @Override public void notifyObservers() { super.notifyObservers(); } @Override public void notifyObservers(Object arg) { super.notifyObservers(arg); } @Override public synchronized void deleteObservers() { super.deleteObservers(); } @Override protected synchronized void setChanged() { super.setChanged(); } @Override protected synchronized void clearChanged() { super.clearChanged(); } @Override public synchronized boolean hasChanged() { return super.hasChanged(); } @Override public synchronized int countObservers() { return super.countObservers(); } }
package top.gabin.oa.web.design; import org.junit.Test; /** * 测试类 * @author linjiabin on 16/4/29 */ public class TestObserver { @Test public void testObserver() { Kuaidi100Subject subject = new Kuaidi100Subject(); TaobaoObserver taobaoObserver = new TaobaoObserver(); subject.addObserver(taobaoObserver); subject.addObserver(new JingdongObserver()); subject.setChanged(); subject.notifyObservers("你的货已经到了"); } }
测试后的结果:
I‘m 京东你的货已经到了 I‘m 淘宝你的货已经到了
原文:http://www.cnblogs.com/gabin/p/5447867.html