2

我有 2 个独立的类,但它们都需要重复做一件事,换句话说,有一个通用的方法。这是方法:

private String createButton (String cls, String value) {
        return "<input type=\"button\" class=\"" + cls + 
                   "\" value=\"" + value + "\" key=\"" + this.id + "\" />";
        }

所以这实际上只是一个单行方法,所以我可以将它复制到两个类中。但我想知道是否有更好的方法来做到这一点。很明显,我真的不想有一个只使用这种方法的超类。另外,我认为仅为按钮创建另一个类并执行以下操作很愚蠢:new Button(cls,value),不是吗?

我想到的另一个选择是为包提供一个实用程序类,并混合使用帮助函数。那有意义吗?正在做吗?

4

5 回答 5

7

您可以使用实用程序类......但它可能会变得不连贯。

public class Utilities {

    /* What do these methods have in common? */

    public String createButton(...) {
        return "<input type='button' />";
    }

    public double calculateCircumference(Circle c) {
        return circle.getRadius() * 2 * Math.PI;
    }

}

这是一种通往上帝对象的黑暗道路的代码。

相反,请考虑确定“实用程序”类的目的和意图:考虑使其成为工厂——特别是抽象工厂,以保持内聚性。

public class HTMLWidgetFactory implements AbstractWidgetFactory<String> { // the interface might be overkill

    /* Oh! This class is clearly used to create HTML controls! */

    public String createButton(...) {
        return "<input type='button' />";
    }

    public String createImage(...) {
        return "<img src='lena.png' />";
    }

}
于 2012-11-21T18:14:45.880 回答
2

是的,带有辅助函数的实用程序类是正确的方法。您将提出其他要求,这些要求也将是共享实用程序。他们都将进入实用程序类。

于 2012-11-21T18:05:24.013 回答
2

我建议创建一个实用程序类,具体取决于项目的规模,将一个类与所有广泛使用的助手一起使用会非常有效。这是我将如何去做的一个例子:

public class Util{

    private static final Util instance = new Util();

    public static Util getInstance(){
        return instance;
    }

    private Util(){}

    public String createButton (String cls, String value) {
        return "<input type=\"button\" class=\"" + cls + 
               "\" value=\"" + value + "\" key=\"" + this.id + "\" />";
    }
}
于 2012-11-21T18:08:41.753 回答
0

最好的方法是制作一个带有此类帮助方法的类的实用程序包,这些帮助方法将被不同的类重复使用。需求增加,系统扩展。如果可行的话,实用程序包还可以与其他项目集成(可重用性)。

于 2012-11-21T18:06:19.897 回答
0

好吧,您的特定功能不会更改实例的任何属性,您是否可以执行以下操作:

public static String createButton (String cls, String value, int id) {
        return "<input type=\"button\" class=\"" + cls + 
                   "\" value=\"" + value + "\" key=\"" + id + "\" />";
        }
于 2012-11-21T18:15:21.037 回答