重构--Introduce Local Extension

本文介绍了如何通过重构和装饰器模式为现有类`FkFkdZdsxService`添加缓存功能,创建了装饰器类`FkFkdZdsxServiceCacheDecorator`。在不修改源代码的情况下,实现了`getFkdmbYmszList`方法的缓存逻辑,增强了服务性能。客户端只需调用装饰器对象即可无缝使用缓存增强功能。

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

目录

1、背景

2、动机

3、做法

4、范例

5、真实工程案例


1、背景

重构手法实际上是实现了装饰器模式,通过继承源类的方式实现类装饰器,而通过包装源类对象的方式实现对象装饰器,两种装饰器模式的实现,都增强了源对象的功能。

2、动机

 

3、做法

4、范例

 

 

 

 

 

5、真实工程案例

       目前我们有一个类FkFkdZdsxService提供了一个方法,public RestResponse<List<FkZdsxFeginVO>> getFkdmbYmszList(FkFkdZdsxSelectDTO dto) throws SystemException

该类源码我们无法直接修改,而我们需要对该类进行增强,让该方法实现缓存功能,在这里我们通过类装饰器来实现了FkFkdZdsxService的装饰器FkFkdZdsxServiceCacheDecorator,客户端将原来调用FkFkdZdsxService对象地方,全部改成调用FkFkdZdsxServiceCacheDecorator对象,该装饰对象与原始目标对象其拥有相同的方法签名,构型相同,客户端是不需要进行变更的。

package cn.vetech.charge.fccost.service.fkzdsx;

import java.util.List;

import org.springframework.stereotype.Service;

import cn.vetech.charge.cloud.cache.annotation.Cache;
import cn.vetech.charge.cloud.common.ApplicationName;
import cn.vetech.charge.cloud.exception.SystemException;
import cn.vetech.charge.cloud.modules.utils.collection.CollectionUtil;
import cn.vetech.charge.cloud.springcloud.api.RestResponse;
import cn.vetech.charge.cloud.springcloud.util.RestResponseUtil;
import cn.vetech.charge.fccost.feign.fkzdsx.dto.FkFkdZdsxSelectDTO;
import cn.vetech.charge.fccost.feign.fkzdsx.vo.FkZdsxFeginVO;

/**
 * FkFkdZdsxService缓存装饰器
 * @author LiQiao
 * @date 2022/05/06
 */
@Service
public class FkFkdZdsxServiceCacheDecorator extends FkFkdZdsxService {
    /**
     * 緩存名字
     */
    private static final String CACHENAME = ApplicationName.FCCOST + "FkFkdZdsxServiceCacheDecorator";

    @Override
    @Cache(appname = CACHENAME, table = "getFkdmbYmszList", key = "{1.qybh}-{1.mbid}-{1.djlx}", expiremin = 30)
    public RestResponse<List<FkZdsxFeginVO>> getFkdmbYmszList(FkFkdZdsxSelectDTO dto) throws SystemException {
        RestResponse<List<FkZdsxFeginVO>> fkZdsxFeginVOListResponse = super.getFkdmbYmszList(dto);
        if (RestResponseUtil.isSuccessfulAndHasResult(fkZdsxFeginVOListResponse)
            && CollectionUtil.isNotEmpty(fkZdsxFeginVOListResponse.getResult())) {
            return fkZdsxFeginVOListResponse;
        }

        return null;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李桥s2008100262

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值