一个策略模式中的两个策略可以使用相同的代码吗?这是否使其成为模板模式



我有一个将文件从一台计算机传输到另一台计算机的程序,该程序使用4个不同的类a、B、C和D。我的程序创建了一个对象,并使用a和B来检查和验证要发送的文件。现在我必须添加一个额外的转移技术。我想使用策略模式将是最好的情况,因为我们可以选择任何一种转移技术。但我想问一下,在我的策略中,我们是否也可以使用类A和B来验证文件的传输?这是否使它成为一种模板设计模式,而不是一种策略设计模式?

如果你的策略非常复杂,并且有一个通用的模式(即验证部分(,你可以有一个策略模板来进行验证,而不是每个具体的策略类来完成其余的:

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) { ... }
}

如果您知道会有不同类型的验证,您甚至可以在TransferFileStrategyTemplate中使用嵌套策略(IValidationStrategy(来处理验证。

最新更新