美好的一天, 我有一个基类,每个实现都需要覆盖一个虚方法,但我想在覆盖之前先调用基本方法。 有没有办法实现这一点,而无需实际调用该方法。
public class Base
{
public virtual void Method()
{
//doing some stuff here
}
}
public class Parent : Base
{
public override void Method()
{
base.Method() //need to be called ALWAYS
//then I do my thing
}
}
我不能总是依赖于base.Method()将在覆盖中调用,所以我想以某种方式强制执行它。这可能是某种设计模式,任何完成结果的方法都可以。
答案 0 :(得分:3)
一种方法是在基类中定义一个public
方法,该方法调用另一个可以(或必须)覆盖的方法:
public class Base
{
public void Method()
{
// Do some preparatory stuff here, then call a method that might be overridden
MethodImpl()
}
protected virtual void MethodImpl() // Not accessible apart from child classes
{
}
}
public class Parent : Base
{
protected override void MethodImpl()
{
// ToDo - implement to taste
}
}
答案 1 :(得分:0)
您可以使用装饰器设计模式,应用此模式可以动态地将附加职责附加到对象。装饰器为子类化提供了灵活的替代扩展功能:
public String obtenerLatitudLongitud (String direccion) throws Exception{
try {
GeoApiContext context = new GeoApiContext().setApiKey(this.propiedades.get(ConstantesApi.KEY_MAPS_GOOGLE));
context.setQueryRateLimit(50);
GeocodingResult[] results = GeocodingApi.geocode(context,direccion).await();
latLong = results[0].geometry.location.toString();
logger.debug("Latitud, longitud : " + latLong);
} catch (Exception e) {
logger.error("Error Normalizando la direccion : " + direccion + " " + e.getMessage());
}
return latLong;
}
希望这有帮助!