装饰模式

装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。

java的IO模块,就大量的使用到了装饰模式。


1.组件接口和组件的实现

/**
 * @Desc:支付组件的接口
 * @author zy
 * @date 2016年8月12日下午2:39:33
 */
public interface Component {

	/**
	 * @Desc:支付成功
	 * @author:zy
	 * @version: 2016年8月12日 下午2:55:44
	 */
	public void paySuccess();
	
	/**
	 * @Desc:修改订单状态
	 * @author:zy
	 * @version: 2016年8月12日 下午2:40:42
	 */
	public void updateOrderStatus();
	
	/**
	 * @Desc:插入订单的log
	 * @author:zy
	 * @version: 2016年8月12日 下午2:46:11
	 */
	public void addOrderLog();
}


/**
 * @Desc:订单类的具体实现
 * @author zy
 * @date 2016年8月12日下午2:46:58
 */
public class OrderOperation implements Component{

	@Override
	public void paySuccess() {
		updateOrderStatus();
		addOrderLog();
	}

	@Override
	public void updateOrderStatus() {
		System.out.println("修改订单状态为已支付");
	}

	@Override
	public void addOrderLog() {
		System.out.println("插入订单日志表");
	}

}

2.支付组件的增强

public class OrderOperationPlus extends OrderOperation{
	
	@Override
	public void paySuccess() {
		super.paySuccess();
		pushOrder();
	}
	
	/**
	 * @Desc:推送支付的流水
	 * @author:zy
	 * @version: 2016年8月12日 下午3:07:06
	 */
	public void pushOrder(){
		System.out.println("**推送支付的流水信息**");
	}
}


3.测试

public class M {
	public static void main(String[] args) {
		Component orderOperation = new OrderOperationPlus();
		
		orderOperation.paySuccess();
	}
}



装饰模式,在原有的逻辑基础上,动态的新增逻辑
 记得之前,公司里做支付,支付成功了要做两件事
 1.更改订单表的订单状态
 2.插入订单的log
但是,之后政府出台了新政策-支付宝支付订单要去海关备案。又要添加新的逻辑又不能改变之前的代码,这里,装饰模式很自然的使用起来了





posted @ 2016-08-12 15:17  Bug开发攻城狮  阅读(91)  评论(0编辑  收藏  举报