我应该选择哪种方式来乘以重载?

时间:2014-09-19 10:13:45

标签: java oop

我在一些非最终类中有公共方法1(...),这在我们的项目中广泛使用。

但我需要在此类的内部最后一个私有方法中添加一些if-condition,并且不要破坏之前实现的其他业务逻辑:(我们有嵌套方法)

public static method1(...) { 
  method2(...)
}

private static method2(...) { 
  method3(...)
}

private static method3(...) { 
  method4(...)
}

private static method4(...) { 
 // here I want to add some if-condition
}

我是否应该重载所有方法,以便通过参数列表引入一些布尔标志,以便在某些情况下切换到我的特殊条件或者我可以在类中创建一个私有字段并将其放到我的private metod4(...){...}中?在最后一种方式,我得到臭臭的代码吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

我不知道您的项目架构是什么以及可以接受多少重构,但我的第一个想法是State设计模式,因为当您的对象改变其行为及其内部时,这是一个很好的选择国家变化。该对象似乎会改变其类。

但这里实际上更多是关于封装。由于您所有的方法(M2,M3,M4)都是私有的,因此无需担心

  

不破坏之前实现的其他业务逻辑:(我们有嵌套方法)

仅仅是因为他们没有接触他人。因此,作为底线 - 如果影响 public M1,则更改最有可能是正确的。请注意,链接到此处对于保留最终结果的处理至关重要。方法4的行为应该明显改变。因此,如果您的建议

重载私有方法是一个不错的选择
  

班级中的私人领域

在调用树中计算,不会以某种方式作为参数传递。

也许如果您发布更多信息或代码 - 答案会更有帮助。

  • 干杯

答案 1 :(得分:0)

有许多连接的静态方法(传递多个参数)对于维护来说不是最佳的。

  1. 第一个天真的措施是为参数列表引入一个类(每个参数都成为一个字段)。然后可以在不更改方法的情况下扩展参数类。

  2. 更好地考虑静态方法是否可能成为常规方法,并且该类是否部分完整。

    public class C {
    
        protected final A a;
        protected final B b;
        protected X x;
    
        public C(A a, B b) { }
    
        public void setX(X x) { }
    
        public void method1() {
            method2();
        }
    ...
    
  3. 或者将它们结合起来。

    一个使用相同参数连续调用另一个方法的方法看起来需要一个面向对象的重写。