我正在尝试研究使用特征的主题,而我似乎无法得到明确的答案。
博主ircmaxell建议他们might be "the new eval",我找到了其他网站like this one,对他们说得好不好。在我的项目中实现它们之前,我想确保我理解它们是如何正常工作的。
例如: 我有10个不同的类,它们都扩展了一个Parent,每个类有20个方法。在一半的类之间可能存在5种方法的重叠,因此将这5种方法抽象为特征是否有意义?特征的关键是这些方法可以应用于需要它们的类,而不会通过将它们放在父级中来污染其他不需要它们的类,对吗?
// Why repeat myself?
class Parent {
public method1() {}
public method2() {}
public method3() {}
}
class Foo extends Parent {
public specificMethod1() {}
public specificMethod2() {}
public commonMethod1() {}
}
class Bar extends Parent {
public specificMethod1() {}
public specificMethod2() {}
}
class Baz extends Parent {
public specificMethod1() {}
public specificMethod2() {}
public commonMethod1() {}
}
// This way makes more sense
trait commonMethod1 {
public commonMethod1() {}
}
class Foo extends Parent {
use commonMethod1;
public specificMethod1() {}
public specificMethod2() {}
}
class Bar extends Parent {
public specificMethod1() {}
public specificMethod2() {}
}
class Baz extends Parent {
use commonMethod1;
public specificMethod1() {}
public specificMethod2() {}
}