Java 这个班是否遵循单一责任原则?

Java 这个班是否遵循单一责任原则?,java,oop,design-patterns,single-responsibility-principle,Java,Oop,Design Patterns,Single Responsibility Principle,我最近被指派设计一个类,该类在一个公共方法中包含业务逻辑 class MyClass private BusinessObject object; public BigInteger calculateCost() { //do calcualation using properties of object } } public BigInteger calculateCost() {

我最近被指派设计一个类,该类在一个公共方法中包含业务逻辑

 class MyClass
       private BusinessObject object;
       public BigInteger calculateCost() {
              //do calcualation using properties of object
       }
 }
      public BigInteger calculateCost() {
              //do calcualation using properties of object
              calculateCost1();
              calculateCost2();
      }
在calculateCost()方法中完成的计算是完全正确的,但是对象的其他属性可以改变计算的方式。 所以基于某些条件,我应该能够应用折扣,有多个条件,每个条件都可以改变,计算是这样做的

因此,我采用了简单的方法,创建了如下的私有方法

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

     private calcualteCost2() {
           //using object's properties calculate the cost
     }
并从public方法调用这些方法

 class MyClass
       private BusinessObject object;
       public BigInteger calculateCost() {
              //do calcualation using properties of object
       }
 }
      public BigInteger calculateCost() {
              //do calcualation using properties of object
              calculateCost1();
              calculateCost2();
      }
这种设计的缺点是,如果我需要添加额外的计算方法,我将不得不更改MyClass,但我得到的反馈是,它不遵循单一责任原则。我相信该类的唯一职责是计算成本,在添加额外的方法以基于业务对象属性的不同方式计算成本之后,它仍然遵循SRP

如果这个设计不是真的遵循SRP,有人能评论一下为什么它不遵循SRP吗

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

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


你们班不遵守的是开放-封闭原则。每次需要引入新的计算机制时,都需要修改类。开闭原则指出类应该对扩展开放,但对修改关闭。在您的案例中,遵守OCP的一种方法是使用where,每个计算类型有一个类。

没有进一步的信息,我认为它遵守SRPAre您还负责设计
BusinessObject
类,或者它是给定的?或者您在那里执行,或者在其他类中调用这些类来计算成本。无论哪种方式,返回最终值之前都需要更改。如果您希望使其更简单,可以在返回最终值之前保留一个扣减(%)循环列表。没有额外的类或进一步的修改