我已经实现了一个包含内置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();
。
答案 0 :(得分:1)
从您的描述中可以看出,您班级的所有方法都是无国籍的。在这种情况下,该类应该是一个不可实例化的辅助类,其所有方法都声明为static
。继承这个类并不是一个好主意,因为它的所有功能都是有用的。如果您发现自己将针对不同集合的方法添加到同一个类,您可能希望使用{{HashMapHelper
方法将类拆分为MapHelper
和HashMapHelper
,MapHelper
1}}根据需要。
使用30多种辅助方法的类在Java中不不常见。有关具有类似功能的类的示例,请查看Collections
类:它有50多个方法,所有这些方法对于操作Java集合都很有用。
答案 1 :(得分:0)
不应仅仅为了重用代码而使用继承。改为使用组合或委托。
如果你不能使用继承,那就不要。在使用继承之前,请问自己是否遵循或违反 LSP ?
Liskov的替换原则(LSP) - “每个派生类都应该适当地替换它的基类”
此外,您可能需要执行提取类重构。然后你会有更多的类与一些方法。我建议你只有五个 Refactorings 因为它们适合这种情况。
重构正在重组代码,在不改变可观察行为的情况下更改其内部结构。在编写代码之前,请牢记 SOLID原则。这将有助于您编写更好的代码。