6

我有一个 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 以 Session 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 请求相关。

在我的情况下我应该走哪条路,在其他情况下我应该如何选择?

MyObject 被一些实用程序类以特定方式使用,例如 MyObjectXXXUtil MyObjectYYYUtil。我想将这些 Util 方法(修改 myObject 并检查特定状态)排除在特定的 MyObject 实现之外,因为它们并不特定于此。许多 Util 函数可以以某种方式与 MyObject 交互。

4

2 回答 2

7

如果 MyObjectUtil 中的方法完全依赖于 MyObject,那么我会将它们放在 MyObject 中。当您有很多可以使用这些方法的类时,实用程序类很有用。

于 2010-12-13T11:52:27.533 回答
2

以下是之前讨论过的其他一些线程:

Java 实用程序类与服务

Java 抽象类或静态实用程序类设计选择

对我来说,这一切都取决于状态。如果实用程序类不需要状态,那么我会选择静态方法。

此外,您描述的方法可以说是对象本身存在于该域对象上的有效操作。

于 2010-12-13T11:54:12.850 回答