这个课程遵循单一责任原则吗?

时间:2017-02-14 14:01:19

标签: java oop design-patterns single-responsibility-principle

我最近被分配到一个公共方法中设计一个包含业务逻辑的类

 class MyClass
       private BusinessObject object;
       public BigInteger calculateCost() {
              //do calcualation using properties of object
       }
 }

在方法calculateCost()中完成的计算完全没问题,但是对象的其他属性可以改变计算的方式。 所以基于某些条件我应该可以应用折扣,有多个条件,每个都可以改变计算完成。

所以我通过创建下面的私有方法

来应用这种简单的方法
     private calculateCost1() {
           //using object's properties calculate the cost
     }

     private calcualteCost2() {
           //using object's properties calculate the cost
     }

从公共方法中调用这些方法

      public BigInteger calculateCost() {
              //do calcualation using properties of object
              calculateCost1();
              calculateCost2();
      }

这个设计的缺点是,如果我需要添加额外的计算方法,我将不得不更改MyClass,但我得到的反馈是它不遵循单一责任原则。我认为班级的唯一责任是计算成本,在添加额外的方法来根据业务对象的属性计算成本的方式不同之后,它仍然坚持SRP。

任何人都可以评论为什么这个设计不遵循SRP,如果它不是真的吗?

1 个答案:

答案 0 :(得分:5)

  

我得到的反馈是它没有遵循单一责任原则

您的班级遵循单一责任原则,因为班级中的所有方法都有一个计算成本的目标。

您的课程没有遵循的是开放式原则。每次需要引入新的计算机制时,都需要修改类。 开放封闭原则表明类应该对扩展开放但是关闭以进行修改。在您的情况下,您可以遵循 OCP 的方法之一是使用Strategy Pattern,其中每种计算类型都有一个类。