public interface ICar
{
bool IsSpeeds200KMPH(CarData carData);
bool IsABSEnabled(CarData carData);
int doors {get;set;}
int wheels {get;set;}
bool IsABSAdvanced();
bool IsSpeedReaches225();
void drive(CarType car);
}
public class BMW : ICar
{
}
public class Honda : ICar
{
}
// factory class to create car object dynamically
public class CarFactory
{
public ICar CreateCar(CarType car)
{
if(car == TypesOfCars.Honda)
return new Honda;
else if(car == TypesOfCars.BMW)
return new BMW;
//....
}
}
//main() method snippet
CarFactory factory = new CarFactory();
ICar carType = facory.CreateCar(DynamicallyProvided_CarTypeValue);
carType.IsABSEnabled(DynamicallyProvided_carData);
carType.IsABSAdvanced();
在上面的例子中,我已经实现了策略模式。我的问题是,我有不同的Car类实现ICar接口。方法IsABSAdvanced()只能在方法IsABSEnabled()返回true时调用,否则它应该只返回false。因此,如何使一个接口方法(定义)依赖于同一接口中定义的另一个方法(定义)?是否有任何方法将限制限制在接口级别,这样访问IsABSAdvanced()的任何人都不应该知道它实际上在内部检查IsABSEnabled()方法。是否有这样的可行性,或者我如何才能实现它? 你要找的是抽象类
接口只包含一个类应该包含的API的信息,而不包含它自带的逻辑。
如果你想要逻辑在上面,你有几个选项-一个,例如:
public interface ICar
{
bool IsSpeeds200KMPH(CarData carData);
bool IsABSEnabled(CarData carData);
int doors {get;set;}
int wheels {get;set;}
bool ABSAdvanced{get;};
bool IsSpeedReaches225();
void drive(CarType car);
}
public abstract class AbstractCar : ICar {
public bool ABSAdvanced {
get {
if(!isABSEnabled()) {
return false;
}
/* some additional logic based on the interface */
/* ... */
return true;
}
}
}
,然后所有的汽车扩展AbstractCar
-因为AbstractCar
是一个抽象类,它将不能被实例化为一个对象。
你的问题也可以简化为:
public abstract class AbstractCar : ICar {
public bool ABSAdvanced { get {return isAbsEnabled();} }
}
如果isABSEnabled
是公共API的一部分,则再次使ABSAdavanced
冗余,这取决于实现细节。