如何在C ++中使用代理类进行“选择加入”接口?

时间:2016-06-02 04:40:30

标签: c++ interface polymorphism

我有5个名为A B C D E的类和2个接口I1 I2。使用多重继承,我可以继承抽象类来实现接口:

class A : public I1, I2 {};

现在,我想添加更多接口I3 I4 I5

必须修改所有5个类定义是乏味的,并且违反Don't Repeat Yourself作为编程原则。

我如何实现接口代理类来封装接口的多态方面而不是抽象基类的多重继承?

换句话说,我希望在不使用继承的情况下将类强制转换为接口类。类型操作符重载是否适用于此处?或者,或许每个类使用一个构造函数会好吗? 目标是尽量减少重复代码。

2 个答案:

答案 0 :(得分:1)

我看到这个问题如下:

  • A,B,C ......类是文件类型,例如JPG,DOC,RTF,XML,PDF,......
  • 接口I1,I2,I3,...作为文档常用的功能,如IPrint,ISaveToFile,ICompress。

因此,每个文档A,B,C,......都需要实现这些界面才能提供这些功能。

如果我已正确描述您的要求,则可以使用Design Pattern : Visitor

另外,如果符合您的要求,我可以详细说明。

答案 1 :(得分:1)

稍微更改类声明以增加一个间接级别?

class A: public I;
class B: public I;
class C: public I;
struct I: I1, I2 /* we will add I3, I4 and I5 tomorrow */
相关问题