【问题标题】:Resolve code duplication with polymorphism用多态性解决代码重复
【发布时间】:2019-09-11 11:23:42
【问题描述】:

假设有一个基类和两个派生类:

struct Derive1 : public Base
{
    func(TypeA arg)
    {
        // Common code part 1

        specificFunc(arg);

        // Common code part 2
    }

    specificFunc(TypeA arg)
    {
        // specific implementation
    }
};

struct Derive2 : public Base
{
    func(TypeB arg)
    {
        // Common code part 1

        specificFunc(arg);

        // Common code part 2
    }

    specificFunc(TypeB arg)
    {
        // specific implementation
    }
};

两个派生类都有一个方法func(),但参数类型不同。 func() 的主体几乎相同,只是在函数中间的某处,它们以不同类型作为参数调用 specificFunc()。和specificFunc()这两个派生类的实现完全不同。

消除Common code part 1Common code part 2 重复的好设计是什么?

无法提取Common code part 1Common code part 2,因为Func() 内部有控制逻辑。

【问题讨论】:

  • 您可以排除Common code part 1Common code part 2,例如在普通函数或基类成员函数中。相反的是func() 的通用函数(模板),您可以在其中提供specificFunc 作为参数。
  • 那是否意味着普通的前置/后置代码不依赖于函数参数?
  • @Klaus 是的,没错。但是specificFunc()的调用是在一个相当复杂的控制逻辑中。

标签: c++


【解决方案1】:

尝试使用 Derive1 和 Derive2 都继承自 Base 的事实。也许你可以找到一种方法来制作 Base 的“Common part 1”和“Common part 2”部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多