如何重构具有类似功能的两个类?

时间:2016-06-22 01:25:08

标签: c++11 design-patterns

我的类具有相同名称的方法,它们执行相同的操作,但它们的实现方式不同。

前:

sudo -u gitlab-psql -i bash /opt/gitlab/embedded/bin/psql --port 5432 -h /var/opt/gitlab/postgresql -d gitlabhq_production

我考虑使用接口,但问题是方法采用不同的参数。然而,模板并不完全适合,因为Item1和Item2以不同的方式运行。换句话说,它们没有通用的方法,因此模板也不完全适合。

这里是否有重构代码的解决方案?

2 个答案:

答案 0 :(得分:1)

鉴于您的评论“有......可以扩展的界面样式类”,您可能有兴趣使用模板来表达常见的“界面”:

template <typename Item>
struct Converter
{
    virtual void map(Item) = 0;
    virtual void convert(Item) = 0;
    virtual void translate(Item) = 0;
};

class converterA : public Converter<Item1> {
    void map(Item1 item1) final { ... }
    void convert(Item1 item) final { ... }
    void translate(Item1 item) final { ... }
};
class converterB : public Converter<Item2> {
    ...same kind of thing...
};

所有它购买它虽然是他们共享的“转换器”界面的表达,一些编译时执行功能签名和名称匹配(例如,如果您更改Converter<>,您将被提醒更新所有派生类型),以及使用对它们派生的模板实例的指针/引用来处理派生类的能力(对你来说没有任何表面用法)。

答案 1 :(得分:0)

我正在考虑使用模板特化,但是如果它们都使用完全不同的方法,那么它并不值得,尽管它更具可读性。