![观察者模式(发布订阅模式) - 断鸿零雁 - 断情阁 观察者模式(发布订阅模式) - 断鸿零雁 - 断情阁](http://img0.ph.126.net/UWG_HSPw3qibNlIuUJgc8A==/6631306359721932561.jpg)
大体上,分为两个,一个是发布者,另一个是订阅者,也就是publisher以及subscriber,
下面举例为顾客购买衣服,大致流程应该是这样,
顾客消费了一件衣服后,
会计收到付款,然后开具发票,
顾客凭小票去出纳那里将小票给出纳,
出纳登记后快递员送货上门
在这里,顾客担任了发布者(被观察者)这一角色,会计、出纳、快递担任了订阅者(观察者)这一角色
下面是具体的代码实现,由于java.util工具包中已经有了该设计模式的实现,我们只需继承、实现、调用即可
Customer.java
/*
* 版权信息:北京汉方三陆零科技有限公司</br>
* Copyright ?2014-2015. All rights reserved. 京ICP备15000045号
*/
package com.hanfang360.com.designpattern.observer;
import java.util.Observable;
import java.util.Observer;
/****************************************************************************
* com.hanfang360.com.designpattern.observer Customer.java Created on 2015年7月15日
* @Author: linfenliang
* @Description:
* @Version: 1.0
***************************************************************************/
public class Customer extends Observable{
// public Customer(Observer ... observers) {
// if(observers!=null){
// for(Observer o:observers){
// this.addObserver(o);
// }
// }
// }
public Customer build(Observer o){
this.addObserver(o);
return this;
}
public void custom(){
this.setChanged();
this.notifyObservers("已付款");
}
}
Accountant.java
/*
* 版权信息:北京汉方三陆零科技有限公司</br>
* Copyright ?2014-2015. All rights reserved. 京ICP备15000045号
*/
package com.hanfang360.com.designpattern.observer;
import java.util.Observable;
import java.util.Observer;
/****************************************************************************
* com.hanfang360.com.designpattern.observer Accountant.java Created on 2015年7月15日
* @Author: linfenliang
* @Description:
* @Version: 1.0
***************************************************************************/
public class Accountant implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println(arg+"会计收到了付款,开具发票");
}
}
DilliveryMan.java/*
* 版权信息:北京汉方三陆零科技有限公司</br>
* Copyright ?2014-2015. All rights reserved. 京ICP备15000045号
*/
package com.hanfang360.com.designpattern.observer;
import java.util.Observable;
import java.util.Observer;
/****************************************************************************
* com.hanfang360.com.designpattern.observer Cashier.java Created on 2015年7月15日
* @Author: linfenliang
* @Description:
* @Version: 1.0
***************************************************************************/
public class Cashier implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println(arg+"我是出纳员,顾客购买信息登记入账");
}
}
Main.java/*
* 版权信息:北京汉方三陆零科技有限公司</br>
* Copyright ?2014-2015. All rights reserved. 京ICP备15000045号
*/
package com.hanfang360.com.designpattern.observer;
import java.util.Observable;
import java.util.Observer;
/****************************************************************************
* com.hanfang360.com.designpattern.observer DilliveryMan.java Created on
* 2015年7月15日
*
* @Author: linfenliang
* @Description:
* @Version: 1.0
***************************************************************************/
public class DilliveryMan implements Observer {
@Override
public void update(Observable o, Object arg) {
System.out.println(arg+"我是配送员,准备开始发货");
}
}
/*
* 版权信息:北京汉方三陆零科技有限公司</br>
* Copyright ?2014-2015. All rights reserved. 京ICP备15000045号
*/
package com.hanfang360.com.designpattern.observer;
/****************************************************************************
* com.hanfang360.com.designpattern.observer Main.java Created on 2015年7月15日
* @Author: linfenliang
* @Description:
* @Version: 1.0
***************************************************************************/
public class Main {
public static void main(String[] args) {
// Customer customer = new Customer(new DilliveryMan(),new Cashier(),new Accountant());
Customer customer = new Customer().build(new DilliveryMan()).build(new Cashier()).build(new Accountant());
customer.custom();
}
}