公共代码的超类vs实用程序类

时间:2017-09-28 10:45:33

标签: java spring multithreading refactoring utility-method

我在2个类中使用相同的方法将字段从一个对象复制到构建器。我想重构它但我不知道是否应该在实用程序类中创建静态方法或将其抽象为超类。

共享此代码的类是Beans,也是多线程应用程序的一部分。

方法如下:

protected static void copyPartyGroup(Message.Builder msgBuilder, 
    final PartyGroup partyIDsGroup, Party.Builder rartyBuilder) {

    rartyBuilder.setPartyID(partyIDsGroup.getId())
    ....

    msgBuilder.setID(partyIDsGroup.getId())

    ....

}

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您还可以在java 8中使用特征,它是一个具有默认方法的接口

请参阅:https://opencredo.com/traits-java-8-default-methods/

或:https://dzone.com/articles/using-traits-in-java-8

如果你的两个类不共享相同的父结构,不要使用超级抽象类,如果创建这个超类的唯一原因是分享你的方法copyPartyGroup,这不是一个好习惯。

见:Liskov替代原则

enter image description here

如果您想尊重单一责任原则:

我认为你必须创建一个服务类。 在您的情况下,可能是rartyBuilder.setPartyIDmsgBuilder.setID具有同步方法的线程安全单例。 (见Initialization-on-demand holder idiom

enter image description here

答案 1 :(得分:1)

如果您可以提取静态方法,那么最好这样做。

使用继承来共享代码会使代码耦合,并且以后很难解开。