我有2个单独的类,但它们都需要重复做一件事,换句话说,有一个常用的方法。这是方法:
private String createButton (String cls, String value) {
return "<input type=\"button\" class=\"" + cls +
"\" value=\"" + value + "\" key=\"" + this.id + "\" />";
}
所以这只是一个单行方法,所以我可以将它复制到两个类中。但我想知道是否有更好的方法。显然,我真的不想只使用那种方法。另外,我觉得为按钮创建另一个类是愚蠢的并且执行:new Button(cls,value),不是吗?
我想到的另一个选择是为包提供一个实用程序类,并混合使用辅助函数。那有意义吗?它正在完成吗?
答案 0 :(得分: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;
}
}
这种代码可以将黑暗的道路引向God Object。
相反,请考虑确定“实用程序”类的目的和意图:考虑将其设为工厂 - 特别是Abstract Factory,以便保持凝聚力。
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' />";
}
}
答案 1 :(得分:2)
是的,带有帮助函数的实用程序类是正确的方法。您将有其他要求,也将是共享实用程序。他们都将进入实用类。
答案 2 :(得分: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 + "\" />";
}
}
答案 3 :(得分:0)
最佳方法是使用具有此类辅助方法的类来创建实用程序包,这些方法将被不同的类重复使用。需求加起来,系统扩展。如果可行的话,实用程序包也可以与其他项目集成(可重用性)。
答案 4 :(得分:0)
嗯,您的特定功能不会更改实例的任何属性,您可以执行以下操作:
public static String createButton (String cls, String value, int id) {
return "<input type=\"button\" class=\"" + cls +
"\" value=\"" + value + "\" key=\"" + id + "\" />";
}