实现某事的主类是否违反了单一责任原则? 例如,请参阅http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html
中的Java教程public class HelloRunnable implements Runnable {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
在此示例中,HelloRunnable是否违反单一责任原则?相反,这是一个kludge吗?
编辑:假装这是一个真实的案例(不是教程示例) - 在这种情况下你怎么看?
答案 0 :(得分:2)
一般来说main
方法并不完全符合“单一责任原则”。但它也没有真正违反它。一个程序总是需要某种入口点来启动它 - 在Java中使用main
方法。你是对的,因为main
方法中的代码并不真正属于这个类。我经常看到的一种方法是创建一个“特殊”类,除了入口点之外什么都不提供。例如,您可以将本教程扩展为:
public class HelloRunnable implements Runnable {
public void run() {
System.out.println("Hello from a thread!");
}
}
public class Main {
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
但是,由于你的问题的来源是一个教程,没有人关心设计原则。人们倾向于保持代码尽可能小而简单。
答案 1 :(得分:1)
当然这不是现实世界的例子。通常,您会在几个(单个负责的)类上划分功能。但是这会使这个示例列表变得混乱,并且会误导意图。你可以争辩说,打招呼是这个班的唯一责任;)