装饰模式

本文通过一个支付组件的例子,详细解析了装饰模式的原理及其在实际项目中的应用。装饰模式允许我们动态地给对象添加职责,而不需要修改其原有结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰模式(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
但是,之后政府出台了新政策-支付宝支付订单要去海关备案。又要添加新的逻辑又不能改变之前的代码,这里,装饰模式很自然的使用起来了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值