实现某事的主类是否违反单一责任原则?

时间:2014-03-07 14:16:55

标签: java oop

实现某事的主类是否违反了单一责任原则? 例如,请参阅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吗?

编辑:假装这是一个真实的案例(不是教程示例) - 在这种情况下你怎么看?

2 个答案:

答案 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)

当然这不是现实世界的例子。通常,您会在几个(单个负责的)类上划分功能。但是这会使这个示例列表变得混乱,并且会误导意图。你可以争辩说,打招呼是这个班的唯一责任;)