c# - 这是软件设计模式吗?

标签 c# design-patterns

假设您从这两个类开始:

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/

相关文章:

c# - 在服务器上处理的小型 API 调用与存储在内存中的一次大型数据提取

c# - 创建用户后将用户添加到 AD 安全组失败

java - Java中单例的其他方式

java - Jackson 映射对象是 DAO 吗?

c# - 动态向 DataTable 添加行

c# - 工厂模式 : Enums or Types?

c# - C#中的锁变量

C# 检查基于文本的答案是否正确

c# - 基本文件版本差异算法

java - Android - 将 XML 架构发布到 PHP 服务器 API