首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们如何将OCP与委托一起使用?

我们如何将OCP与委托一起使用?
EN

Stack Overflow用户
提问于 2012-05-21 17:09:22
回答 2查看 137关注 0票数 0

在继承的帮助下,有很多使用OCP的示例。但我对如何使用OCP和委托感到困惑。任何人都可以分享任何样本吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-21 17:13:17

您可以有一个基类,它像Template pattern一样委托给派生类。通过允许派生类,这对扩展是开放的,但基类仍将对修改关闭。

下面是一个用C++编写的例子:

代码语言:javascript
复制
class BaseClass
{
public:
    void doStuff() {
        doStuff1(); // delegating to derived class

        // do base class stuff here

        doStuff2(); // delegating to derived class

        // do more base class stuff here

        doStuff3(); // delegating to derived class
    }

protected:
    virtual void doStuff1() = 0;
    virtual void doStuff2() = 0;
    virtual void doStuff3() = 0;
};

class DerivedClass1 : public BaseClass
{
protected:
    void doStuff1() { /* your impl here */ }
    void doStuff2() { /* your impl here */ }
    void doStuff3() { /* your impl here */ }
};

// Implement as many other derived classes as you wish

请注意,您不必修改BaseClass (它对mods关闭),并且它将委托给派生类,并且可以实现更多的派生类(对扩展开放)

票数 1
EN

Stack Overflow用户

发布于 2012-05-22 05:51:21

如果我正确理解了"delegation“,它可能看起来像这样(C#):

代码语言:javascript
复制
class Product
{
    public decimal Price {get;set;}
}

class Basket
{
    IEnumerable<Product> _products;
    Func<Product, decimal> _taxCalculator;

    public Basket(IEnumerable<Product> products, Func<Product, decimal> taxCalculator)
    {
        _products = products;
        _taxCalculator = taxCalculator;
    }

    public decimal CalculateBasketValue()
    {
        decimal sum = 0;
        foreach (var product in _products)
        {
            sum += product.Price + _taxCalculator(product);
        }
        return sum;
    }
}

public static void Main()
{
    var products = new []
    {
        new Product { Price = 100 }
    };
    var twentyPercentTax = new Func<Product, decimal>(product => product.Price * 0.2m);
    var basket = new Basket(products, twentyPercentTax);
    Console.WriteLine(basket.CalculateBasketValue());
}

该类接近于计算篮子的值。然而,它对计算税收的方式是开放的。税收的计算被委托给taxCalculator。你可以很容易地拥有一堆税务计算器,并根据国家或其他任何条件选择其中一个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10682374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档