gpt4 book ai didi

c++ - 策略模式与继承的区别

转载 作者:可可西里 更新时间:2023-11-01 14:53:54 26 4
gpt4 key购买 nike

Strategy PatternInheritance有相同的概念,所以我可以用Inheritance实现Strategy Pattern这听起来比Strategy Pattern更简单、更清晰

启动模式:

class IBase
{
public:
virtual void processAction(void *data) = 0; // pure virtual
}

class Worker: public IBase
{
public:
virtual void processAction(void *data)
{
// define logic
}
}

继承:

class Base
{
public:
virtual void processAction(void *data) {}
}

class Worker: public Base
{
public:
virtual void processAction(void *data) override
{
// define logic
}
}

我的问题是它们之间的区别是什么?或者什么时候应该使用 Strategy PatternInheritance

链接:Strategy Pattern

最佳答案

假设您设计了一个缓存。缓存可以有关于

  • 驱逐政策(LIFO、FIFO、LRU)
  • 过期政策(读后,写后)
  • 最大尺寸(元素数量、内存使用量)

现在假设您想让缓存的用户选择这些选项中的任何一个,并且您使用了继承。你需要 3 * 2 * 2 = 12 个不同的类:

  • LifoAfterReadNumberOfElementsBasedCache,
  • LifoAfterReadMemoryBasedCache,
  • 等等

4 个 LifoXxx 类中的每一个都必须实现相同的算法来实现后进先出策略。其他的也一样。

使用策略模式而不是继承来实现它,您将拥有一个 Cache 类和 7 个策略类(每个策略一个),您可以根据需要组合它们,而无需代码重复。

而且您还可以让您的 Cache 的用户定义自己的策略,这是您没有预料到的,并让他将其与其他策略结合起来,而无需创建大量新的子类。

关于c++ - 策略模式与继承的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25710295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com