装饰模式

来源:互联网 发布:android jdk linux 编辑:程序博客网 时间:2024/05/20 07:50

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

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

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

[java] view plain copy
print?

/**  * @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();  }  

[java] view plain copy
print?

/**  * @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.支付组件的增强

[java] view plain copy
print?

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.测试

[java] view plain copy
print?

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

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