在Doctrine中,假设我想要实现不同类型的交通工具。也许是汽车、飞机、自行车等等...所有这些交通工具都有许多不同的属性,但也有一些非常普遍的东西,比如它们都是由某种材料制成的。
所以如果我想获取这种材料...应该实现一个抽象类Vehicle,其中包含一个属性material并实现getter/setter,还是应该定义一个接口IVehicle,并在其中定义getter/setter以确保有一个真正用于获取和设置材料的方法?或者甚至同时使用这两个?
使用接口感觉很“专业”...但在接口中定义getter/setter感觉不对,所以我的个人感觉是:
不使用接口,只使用抽象类。
但是抽象类的方法是否受到滥用的保护?例如,在另一个地方,我肯定希望从getMaterial函数返回一个Material类型...抽象类方法是否也能安全地防止返回完全意外的东西(像接口一样)?
因此,如果我将此交通工具扩展为另一个具体类,开发人员不应该能够返回意外的东西,但也应该能够在需要时更改特定方法中的逻辑。
所以如果我想获取这种材料...应该实现一个抽象类Vehicle,其中包含一个属性material并实现getter/setter,还是应该定义一个接口IVehicle,并在其中定义getter/setter以确保有一个真正用于获取和设置材料的方法?或者甚至同时使用这两个?
使用接口感觉很“专业”...但在接口中定义getter/setter感觉不对,所以我的个人感觉是:
不使用接口,只使用抽象类。
但是抽象类的方法是否受到滥用的保护?例如,在另一个地方,我肯定希望从getMaterial函数返回一个Material类型...抽象类方法是否也能安全地防止返回完全意外的东西(像接口一样)?
因此,如果我将此交通工具扩展为另一个具体类,开发人员不应该能够返回意外的东西,但也应该能够在需要时更改特定方法中的逻辑。
VehicleInterface
,那么在期望一个车辆时,你可以对你的代码进行类型化(在我看来这是一个好习惯)。制作完接口之后,为什么要在每个类中复制/粘贴代码呢?总之,我会同时使用接口和抽象类。 - Zyigh