装饰模式
装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。
java的IO模块,就大量的使用到了装饰模式。
/**
* @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
但是,之后政府出台了新政策-支付宝支付订单要去海关备案。又要添加新的逻辑又不能改变之前的代码,这里,装饰模式很自然的使用起来了