本书深入剖析经典软件设计案例,并详细讲解如何运用设计模式进行代码重构。书中提供了丰富的Java语言实现示例,帮助读者掌握实际应用技巧。
原始需求背景是网宿CDN需要按月向客户收取服务费用,根据流量大小和服务类型的不同来确定收费标准。具体的收费标准如下:web应用为每兆1000元;流媒体应用则按照每兆700元计算;下载应用的计费方式则是每兆500元。在月底生成报表时,需要列出每位客户每个频道的具体费用以及客户的总费用,并且还要显示该客户的重要性指数,重要性指数通过公式网页流量/100+下载流量/600来得出。
随着需求的变化,运维部门希望系统能够输出xml格式的数据以供其他系统的读取和处理。然而,由于report()函数的逻辑无法直接应用于生成xml数据的需求中,因此需要创建一个新的名为xmlReport()的方法。尽管在最初的阶段可以通过复制现有的report()方法并进行相应调整来实现这一目标,但随着成本中心提出修改计费规则的要求以及客服部门计划对服务类型和用户重要性指数计算方式进行更改时,上述做法的问题开始显现。
每次变更都需要同时更新两个不同的函数(xmlReport() 和 report())以保持一致性。这不仅增加了开发的复杂度,还可能导致错误的发生。因此,在面对越来越多的需求变化与复杂的计费规则调整过程中,我们需要采用面向对象编程的原则和方法来重新设计系统结构,从而提高代码复用性和维护性。