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()
可以是静态的,是因为可以有一个class
Man
同时睡觉和跑步

要问的问题是:


调用
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
s
sleep()
run()
,它们都是从
Animal
@dazu继承的,我在更新的答案中已经解释了这一点。