一个工作中遇到的程序设计问题

功能是合同的数据变更功能,需要将需要比对合同变更前后的字段然后返回字段结果。
合同有多种,例如有:收购合同、合作合同、战略合同等。。。
合同会有通用字段,不同类型的合同会有独立的字段。

合同A:
通用字段a
通用字段b
A字段1
A字段2

合同B:
通用字段a
通用字段b
B字段1
B字段2

如果用模板方法做通用处理:

abstractCompareService {
    
    commonCompare() {
        compare a
        compare b
        ...
    }

    // 抽象方法,让实现类实现
    abstract bizCompare();

    compare() {
        commonCompare();
        bizCompare();
    }
}

ACompareService extends abstractCompareService {
    
    bizCompare() {
        compare A字段1
        compare A字段2
    }
}

如果用组合的方式:


如果使用组合大于继承的原则:
CompareService {
    ContractCompareService service;

    compare() {
        commonCompare();
        service.bizCompare();
    }

}

A去实现ContractCompareService接口
ACompareService implements ContractCompareService {
    bizCompare() {
        compare A字段1
        compare A字段2
    }
}

后来仔细想了(请教),如果只是单纯的需要抽出共通的通用字段比较逻辑,使用模板方法比较合适;如果是侧重于方法的抽象,例如合同A支持打印,合同B不支持打印,使用组合比较合适。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容