搜索

搭建个人存储服务器NAS

用过了各种网盘,各种限制,各种害怕数据泄露,于是就踏上了搭建自己存储服务器这条路,如果有条件赶紧试试吧。

掌上菜谱-微菜谱等你来解锁

像我这种不会做饭的人,偶尔兴趣来潮,想动手做做饭,泡泡茶,那么就需要一本菜谱来指引了,为此,我专门开发了一款菜谱小程序,欢迎体验。

Java抽象类的使用

我们在实际开发中会有一定的业务流程,很多流程的步骤是一样的,但是具体的业务逻辑需要不同的场景去完成,这时候我们首先想到的是抽象类和接口。

Java抽象类的使用

我们在实际开发中会有一定的业务流程,很多流程的步骤是一样的,但是具体的业务逻辑需要不同的场景去完成,这时候我们首先想到的是抽象类和接口。

抽象的目的是为了让某一行为或者流程规范化操作,让继承它的子类处理某个通用流程节点上需要特殊化的业务。

而我理解的接口更是赤裸裸的指定规则,让别人按照统一标准去实现所定义的行为事件。

抽象类可以包含方法的实现,可以包含普通类;抽象类的目的就是为了让其他类继承,所以不能使用final修饰。

 

本文简单介绍抽象类的使用。

业务场景举例:

公司与合作方很多系统对接,但是不同合作方相同属性数据格式却不相同,需要转为公司统一的数据格式,例如联系人关系code,妻子有的业务方使用P表示,有的使用W表示还有Z等等表示;

当合作方带来收益的时候,他们就是爸爸,他们不会使用我们的标准修改,那只能我们自己转。

下面贴出类似业务的主要代码块:

 

public class BaseProvider {

    public static BaseEntryProvider getFundProvider(String creditModel) {
        return (BaseEntryProvider) SpringContextHolder.getBean(getProviderName(creditModel));
    }

    static String getProviderName(String creditModel) {
        if (CreditModelEnum.getByName(creditModel) == null) {
            throw new RuntimeException("CreditModel is not exist");
        }
        switch (CreditModelEnum.getByName(creditModel)) {
            case YH_JTNS_MODEL:
                return "kunlunProvider";
            case XD_FD_MODEL:
                return "fdProvider";
            default:
                throw new RuntimeException("Provider is not exists");
        }
    }
}

 

@Component
public abstract class BaseEntryProvider {
    public abstract String getFundChannel(Long contractNo);

    public ApplyEntry fillSpecialData(ApplyEntry applyEntry) {
        return applyEntry;
    }
}
/**
* 不同合作方单独处理需要转换的逻辑
*/
@Service
public class KunlunProvider extends BaseEntryProvider {
    @Override
    public ApplyEntry fillSpecialData(ApplyEntry applyEntry) {
       // 处理业务逻辑,转换等等
       return applyEntry;
    }
}

 

这种就减少了很多的if和else,逻辑清晰了很多。

留 言