如何划分具有独立方法的类以下?

时间:2014-07-22 16:12:03

标签: java oop inheritance

我已经实现了一个包含内置Java不支持的方法的类。但是,经过一段时间,这个班级变得相当大。由于它包含printMapContainer() and splitMapContainer之类的独立方法,我认为我应该将类划分为两个或更多不同的逻辑子类并添加一些层次结构。但是,我不知道如何分类下面的类,因为它们不适合inheritance类问题。我应该如何在逻辑上将具有独立方法的类相互划分,以便我可以将更多方法放到新的层次结构中而不会丢失代码质量? (一个班级有30种方法,很尴尬,不是吗?)

 HashMapHelper

      mergeHashMaps.java // merge more than one hash maps into one 
      printHashMap.java  // print key,value pair in desired format to console
      formHashMap.java   // form existing hash map into new format
      splitHashMap.java  // split hash map into more same size chunks
      isEqual.java       // is two hash map contain same pair
      removeALL.java     // remove all key from hash map
      updateKeyALL.java  // update hash map with new key set

每个方法都有多个辅助方法,以便遵循24行每个方法的规则。因此,在一个班级中,我有近20种方法。我只是想将层次结构放到这个类中,然后使用,例如;也许是,HashMapHelper hMH = new BasicHashMapMethods();

2 个答案:

答案 0 :(得分:1)

从您的描述中可以看出,您班级的所有方法都是无国籍的。在这种情况下,该类应该是一个不可实例化的辅助类,其所有方法都声明为static。继承这个类并不是一个好主意,因为它的所有功能都是有用的。如果您发现自己将针对不同集合的方法添加到同一个类,您可能希望使用{{HashMapHelper方法将类拆分为MapHelperHashMapHelperMapHelper 1}}根据需要。

使用30多种辅助方法的类在Java中不常见。有关具有类似功能的类的示例,请查看Collections类:它有50多个方法,所有这些方法对于操作Java集合都很有用。

答案 1 :(得分:0)

不应仅仅为了重用代码而使用继承。改为使用组合或委托。

如果你不能使用继承,那就不要。在使用继承之前,请问自己是否遵循或违反 LSP

Liskov的替换原则(LSP) - “每个派生类都应该适当地替换它的基类”

此外,您可能需要执行提取类重构。然后你会有更多的类与一些方法。我建议你只有五个 Refactorings 因为它们适合这种情况。

  • 移动方法
  • 移动字段(如果您的系统有字段)
  • 提取课程
  • 提取超类
  • 提取子类

重构正在重组代码,在不改变可观察行为的情况下更改其内部结构。在编写代码之前,请牢记 SOLID原则。这将有助于您编写更好的代码。