假设你有一个抽象的类在做一些事情。然后你让抽象的B类做其他的事情。
最后是一些普通的课程,比如说C…Z.
A和B都提供C类使用的功能。Z类。在我的例子中,主要是一个静态的观察者模式,对于某种类型的属性,有些人会得到魔法+延迟加载-这不是静态的。我想把它合并到一个类中,但是我确信它违反了srp:)
所以我把A,B扩展到C,D等…基本上都是C..z类继承了a&b类的功能。所以除了他们应该做的之外,他们还做观察者之类的事情
这是否违反了单一责任原则?
最佳答案
我不知道这是否适用于您的特定情况,但我发现,大多数时候,抽象类和它的实现可以被分成两个普通类。
例如:
abstract class AbstractAdder {
int AddThree(int a) {
Add(a, 3);
}
abstract int Add(int a, int b);
}
class NormalAdder inherits AbstractAdder {
int Add(int a, int b) {
return a + b;
}
}
var result = new NormalAdder().AddThree(6);
可改为:
class ThreeAdder {
ThreeAdder(IGenericAdder genericAdder) {
this.genericAdder = genericAdder;
}
int AddThree(int a) {
return this.genericAdder.Add(a, 3);
}
}
class NormalAdder implements IGenericAdder {
int Add(int a, int b) {
return a + b;
}
}
var result = new ThreeAdder(new NormalAdder()).AddThree(6);
这有几个优点:
类之间的耦合不太紧密,因为它们不是相互继承的。因为类是独立的,所以职责更加独立和明确。
您可以使用多个类的功能,而只能从一个抽象类继承。(编辑:显然不在php中,因为您有多个继承)
更清楚的是(imho)在哪个类上调用方法。
似乎您正在使用继承来耦合多个类,但这并不是继承的目的。