我正在阅读关于线程的内容,并且提到通过实现Runnable接口,我们违反了每个对象应该具有明确定义的单一责任的原则。有人可以解释它是如何违反软件原则的吗?
答案 0 :(得分:1)
原则来自面向对象的建模社区。例如,在OO建模中,如果类“A”扩展为“B”,那么句子“A是一种B”应该具有某种意义。也许类“A”的模拟实现接口“C”是“A能够做C”?
让我们看一些例子:
public class Mammal extends Animal
这个例子读得很好:哺乳动物是一种动物。
现在让我们添加一些接口:
public class Mammal extends Animal implements Walking, Carnivorous
一切都还是好的:哺乳动物是一种能够行走和吃肉的动物。
现在让我们添加Runnable:
public class Mammal extends Animal implements Walking, Carnivorous, Runnable
阅读它:哺乳动物是一种能够行走,吃肉的动物,whose instances are intended to be executed by a thread.
这听起来不太好。哺乳动物与Java运行时环境及其线程有什么关系?哺乳动物是否应该知道它们是在计算机中运行的模型?从面向对象建模的角度来看,答案是明确的:哺乳动物与JRE线程无关,不应实现Runnable接口。