Java 使用一个方法创建类是否合适?
我想知道生成这样使用的代码是否是一种好的做法:Java 使用一个方法创建类是否合适?,java,class,oop,object,static,Java,Class,Oop,Object,Static,我想知道生成这样使用的代码是否是一种好的做法: new TemplateProcessor(inputStream).processTemplate("output-path.xhtml"); 这里,TemplateProcessor只包含一个公共方法。上面的代码似乎可以用静态方法表示,但我希望避免这种情况。原因很简单:对象可能包含封装状态(可能现在,可能将来)。亲爱的专家们,在这种情况下,您更喜欢什么?类应该被视为在程序中执行关键角色或功能的对象或模块。其他类或模块无法完成的角色。例如,您可
new TemplateProcessor(inputStream).processTemplate("output-path.xhtml");
这里,TemplateProcessor只包含一个公共方法。上面的代码似乎可以用静态方法表示,但我希望避免这种情况。原因很简单:对象可能包含封装状态(可能现在,可能将来)。亲爱的专家们,在这种情况下,您更喜欢什么?类应该被视为在程序中执行关键角色或功能的对象或模块。其他类或模块无法完成的角色。例如,您可以有一个类
Animal
,它提供函数sleep()
,run()
。但是您可能希望为食肉动物创建一个类,该类还包括kill()
,hunt()
等。因此,您可以通过扩展Animal
来实现食肉动物
类,该类完成Animal
类型的所有变量所做的工作,但还额外执行了捕杀和狩猎
如果您的类只有一个公共方法,但是如果将它作为一个单独的模块对设计很重要,那么为它创建一个类是很好的。如果需要,您可以稍后对其进行扩展
此外,您还可以使sleep()
和run()
函数保持静态和公共,所有Animal
都可以这样做,因此您只需执行Animal.sleep()
等操作,而无需创建单独的实例。但是像roar()
这样的函数不应该是
更新:
我之所以说,sleep()
和run()
可以是静态的,是因为可以有一个classMan
同时睡觉和跑步
要问的问题是:
调用
sleep()
和run()
或类的任何函数而不初始化该类的对象有意义吗?如果是,则将其设置为静态是有意义的。将代码封装在静态方法中是合理的,通过静态导入,它变得非常易于使用:
processTemplate(inputStream, "output-path.xhtml");
上面的静态方法只是一个façade,一个方便的方法,用于您的类正在解决的特定用例,应该是一个非常常见的方法。它不会阻止类的发展,甚至添加状态。对于更专门的用例,使用者仍然可以创建类的实例并像往常一样使用它的方法
为了使这种分离更加明显,可以将静态方法添加到同级类中,如TemplateProcessorFacade
,这是一个不可实例化的实用程序类:
public final class TemplateProcessorFacade {
private TemplateProcessorFacade() {}
public static void processTemplate(...) {
...
}
}
如果一个对象携带一个状态,那么一个类似乎是一种选择。实用静态方法似乎只有在没有状态被携带的情况下才是一种好方法code@skiwi自从我开始使用DI/IoC以来,静态方法似乎并不好:>无论如何,就代码而言:我将保持流分离,并将其显式地传递给方法(除非TemplateProcessor本身是一个流,并设计成这样使用),即使它不是静态方法。这允许更明显地控制流生存期,而不受TemplateProcessor生存期的影响——在需要时让调用方处理它。这使得TemplateProcessor更容易在方法之间传递,并存储在成员或诸如此类的文件中(不必担心流的生存时间),同时也使其更易于与DI/IoC一起使用;来吧,再试一次;-)以下内容来自String类:
returnnewformatter().format(format,args.toString()对不起,最后一句对我来说有点不清楚。为什么在这里创建静态方法?所有的Animal
ssleep()
和run()
,它们都是从Animal
@dazu继承的,我在更新的答案中已经解释了这一点。