Java: предпочитаете Utility Class в зависимости от экземпляра класса или статических методов?
У меня есть класс Java, который делает что-то вроде этого
public class MyObjectUtil {
private final MyObject myObject;
public MyObjectUtil (MyObject myObject){
this.myObject = myObject;
}
public boolean isSomeInfoPresentValid() {
return myObject.isSomething();
}
public void modifyMyObjectInSomeWay(String blah) {
myObject.modify(blah);
}
}
Каждый раз, когда мне приходится создавать экземпляр своего класса Utility для взаимодействия с конкретным экземпляром MyObject.
myObject присутствует как объект сеанса
MyObjectUtil myObjUtil = new MyObjectUtil(myObject);
myObjUtil.modifyMyObjectInSomeWay("blah");
boolean valid = myObjUtil.isSomeInfoPresentValid();
Чтобы достичь того же результата, у меня могут быть статические функции, которые каждый раз выполняют одни и те же операции, используя myObject в качестве параметра метода.
public class MyObjectUtil {
public static boolean isSomeInfoPresentValid(MyObject myObject) {
return myObject.isSomething();
}
public static void modifyMyObjectInSomeWay(MyObject myObject, String blah) {
myObject.modify(blah);
}
}
Я не знаю, куда мне идти.
Я использую класс Util в своих контроллерах, и иногда мне нужно вызывать несколько методов для одного и того же экземпляра myObject, поэтому первое решение кажется мне более правильным. В то же время, так как у меня много запросов к моим контроллерам, я могу в конечном итоге каждый раз создавать множество экземпляров MyObjectUtil, так как myObject связан с конкретным http-запросом.
Какой путь мне выбрать в моем случае и как выбрать в других случаях?
MyObject используется определенным образом некоторыми классами утилит, такими как MyObjectXXXUtil MyObjectYYYUtil. Я хотел бы использовать эти методы Util (которые изменяют myObject и проверяют определенный статус) из конкретной реализации MyObject, поскольку они не являются специфическими для этого. Многие функции Util могут взаимодействовать с MyObject определенным образом.
2 ответа
Если методы в MyObjectUtil полностью зависят от MyObject, я бы просто поместил их в MyObject. Служебный класс полезен, когда у вас есть много классов, которые могут использовать методы.
Вот некоторые другие темы, которые обсуждали это раньше:
Java Utility Class vs. Service
а также
Выбор абстрактного класса Java или класса Static Utility
Для меня все зависит от государства. Если служебный класс не нуждается в состоянии, тогда я использую статическую методологию.
Также описанные вами методы могут существовать в самом объекте как допустимые действия для этого объекта домена.