在阅读抽象时,我遇到了以下声明 “抽象仅捕获与当前视角相关的对象的细节” 例如. 从驾驶员的角度来看,Car class会是 public class Car { void start(); void applybrakes(); void changegear(); void stop()
“抽象仅捕获与当前视角相关的对象的细节”
例如.
从驾驶员的角度来看,Car class会是
public class Car { void start(); void applybrakes(); void changegear(); void stop(); }
从机械师的角度来看,Car class会是
public class Car { void changeOil(); void adjustBrakes(); }
我的问题,
在设计系统时,我们是设计一个用户视角(驱动程序还是机制)或者可以
我们设计了多个用户视角,并根据用户类型进一步抽象出来?
希望我的问题很明确.
谢谢
根据您的使用情况,您可能需要为多个用户设计.在您的示例中,如果您的汽车将由机械师和驾驶员使用,那么您不能忽略一组用户.在这种情况下,您仍然可以使用Interfaces抽象细节.你可以像这样设计你的对象:
interface IDrivable { void start(); void applyBrakes(); void changeGear(); void stop(); } interface IFixable { void changeOil(); void adjustBrakes(); } public class Car : IDrivable, IFixable { // implement all the methods here }
现在,当机械师想要汽车时,你不给他一个Car对象,而是给他一个IFixable对象.同样,驱动程序获取一个IDrivable对象.这样可以同时保留两组用户的相关抽象.
class Driver { private IDrivable car; public Driver(IDrivable car) { this.car = car; } public driveCar() { this.car.start(); this.car.accelerate(); //this is invalid because a driver should not be able to do this this.car.changeOil(); } }
类似地,机械师将无法访问接口IDrivable中的方法.
你可以在这里阅读更多关于interfaces的内容.即使这是MSDN链接并使用C#,所有主要语言都支持接口.