假设您从这两个类开始:
public class Foo{
public virtual Baz Bar(){
return GetStandardBaz();
}
}
public class Qux: Foo{
public virtual Baz Bar(){
return GetQuxBaz();
}
}
现在假设要求在 Bar
被调用时返回它之前用 Baz
做一些事情。我会创建一个 virtual protected
方法,然后从公共(public)方法中删除 virtual
,如下所示:
public class Foo{
public Baz Bar(){
var value = BarInternal();
DoSomethingFirst(value);
return value;
}
protected virtual Baz BarInternal(){
return GetStandardBaz();
}
}
public class Qux: Foo{
protected override Baz BarInternal(){
return GetQuxBaz();
}
}
这确保无论何时调用 Bar
,生成的 Baz
都会在返回之前传递给 DoSomethingFirst
。是的,这是对所有子类的重大更改,但它不需要对 Bar
的任何调用站点进行任何更新。
这是标准的设计模式吗?有没有更好的方法让我失踪?还想知道是否有比 Internal
更好的后缀名称。
最佳答案
如果你稍微改变 Foo
类如下你会得到 Template Method pattern .
public class Foo{
public Baz Bar(){
var value = BarInternal();
DoSomethingFirst(value);
return value;
}
protected virtual Baz BarInternal(){
return GetStandardBaz();
}
}
您可以使用 Decorator pattern 实现类似的效果以及。决定将取决于您的类(class)打算做什么的详细信息。
关于c# - 这是软件设计模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17844627/