假设我需要一组类来实现所有方法 X,Y和Z才能正常工作。在这种情况下,我可以让他们实现一个共同的界面来强迫它。
现在,我的情况有点不同 - 我的课程需要实现 X,Y和Z中的至少一个,而不一定是所有这些。接口在这里无法帮助我。我能想到的最接近的是一个共同的父母 - 它可以检查其建构中是否存在X,Y或Z.
我宁愿在这里避免继承,因为我可能需要在已经拥有父级的类中实现这个“接口”。那么 - 还有另一种优雅的方法吗?
(我在PHP工作,但如果存在一般的OOP解决方案,它可能会为更广泛的受众服务。)
答案 0 :(得分:1)
我宁愿在这里避免继承,因为我可能需要实现这个" interface"在已经拥有父级的类中。那么 - 还有另一种优雅的方法吗?
如果我理解正确,您可以通过Traits解决该问题:
trait DefaultImpl
{
public function x()
{
echo "Default implementation of x()\n";
}
public function y()
{
echo "Default implementation of y()\n";
}
public function z()
{
echo "Default implementation of z()\n";
}
}
class XImpl
{
use DefaultImpl;
public function x()
{
echo "Custom implementation of X\n";
}
}
$x = new XImpl();
$x->x();
$x->y();
$x->z();
从设计的角度来看,这不是一个很好的解决方案。但它比不必要的继承更好。