抽象类和接口,提取Class类对外能力的最大公约数到上层,subClass/实现类细分层只需要关注上层抽象出的区别点。
抽象类 - 实体,即对某一具体实体的抽象,由抽象父类维护公共能力,子类关注区别点,例如优惠券实体细分的代金券(门槛)、满减券,公共能力:效期、领券、用券、核销,区别点在于用券规则的不同。
    接口 - 场景,即对某一业务场景的抽象,抽取各个细分场景的公共流程,实现类关注差异化实现,例如取运费场景细分欧洲、香港、日本,公共能力:备案校验、寻口岸、寻园区、清关服务配置,区别在于落地配&承运商规则。
    但在实操中 接口多用于对外能力的封装,以及顶层业务场景的抽象,抽象类替代接口完成业务场景的抽象和实现。jdk8+可配合接口的default方法实现类似抽象类的能力。
    这里不区分接口和抽象类,只针对实体和场景,针对实体的典型设计 - 抽象工厂模式,针对场景的典型设计 - 模板方法模式+策略模式。