Если ваши стратегии довольно сложны и имеют общую схему (т.е. часть проверки), вы можете иметь шаблон стратегии, который выполняет проверку, тогда как каждый конкретный класс стратегии делает все остальное:
public interface ITransferFileStrategy {
bool TransferFile(File f);
}
public abstract class TransferFileStrategyTemplate {
public bool TransferFile(File f) {
if (!ValidateFile(f)) return false;
return TransferFileInner(f);
}
protected virtual bool ValidateFile(File f) {
//implement it here
}
protected abstract bool TransferFileInner(File f);
}
public class TransferFileStrategyA {
protected override bool TransferFileInner(File f) { ... }
}
вы могли даже используйте вложенную стратегию (IValidationStrategy) в TransferFileStrategyTemplate для обработки проверки, если вы знаете, что будут разные виды проверок.