Java: предпочитаете Utility Class в зависимости от экземпляра класса или статических методов? - PullRequest
5 голосов
/ 13 декабря 2010

У меня есть класс 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 isпредставить как сеанс obj

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-запросом.

Какой путь мне следует выполнить в моемcase и как выбрать в других случаях?

MyObject используется определенными способами некоторыми классами утилит, такими как MyObjectXXXUtil MyObjectYYYUtil.Я хотел бы использовать эти методы Util (которые изменяют myObject и проверяют определенный статус) из конкретной реализации MyObject, поскольку они не являются специфическими для этого.Многие функции Util могут определенным образом взаимодействовать с MyObject.

Ответы [ 2 ]

7 голосов
/ 13 декабря 2010

Если методы в MyObjectUtil полностью зависят от MyObject, я бы просто поместил их в MyObject. Служебный класс полезен, когда у вас много классов, которые могут использовать методы.

2 голосов
/ 13 декабря 2010

Вот некоторые другие темы, которые обсуждали это раньше:

Класс Java Utility против службы

и

Выбор дизайна класса Java Abstract Class или Static Utility

Для меня все зависит от состояния. Если служебный класс не нуждается в состоянии, тогда я использую статическую методологию.

Также описанные вами методы могут существовать в самом объекте как допустимые действия для выполнения над этим объектом домена.

...