一个类的多个接口

时间:2016-11-22 12:01:24

标签: c++ c++11 interface c++14

我正在努力想出一个优雅的解决方案来解决在C ++中为类提供多个接口的问题。 假设我们有B,C和D类.B和C需要定制/控制访问A类,而D可以直接访问。提供此类接口的解决方案需要是可扩展的。未来的接口可能只适用于一个特定的类。

目前我正在创建接口类(IA_1,IA_2),它们引用了类A.B和C将提供这些接口的实例,并且可以以自定义/受控方式分别访问A到IA_1和IA_2。情况如下图所示。

enter image description here

这样做的好处是,在实现新界面时我不需要触摸A类。新接口可以通过继承来利用旧接口。需要访问A的类只能通过其特定的接口来完成。

C ++中的实现如下所示:

class A{
public:
  void foo();
};

class IA_1{
public:
  void foo(const B& b);
private:
  std::weak_ptr<A> m_A;
};

class IA_2{
public:
  void foo();
private:
  std::weak_ptr<A> m_A;
};

class B{
  std::unique_ptr<IA_1> m_A;
};

class C{
  std::unique_ptr<IA_1> m_A;
};

class D{
  std::weak_ptr<A> m_A;
};

接口将weak_ptr传递给A,因为我不希望只访问A的类参与其生命周期管理。

目前我正在为B或C的每个实例创建一个接口对象,尽管它们都在做同样的事情。我已经考虑过只创建一个接口对象,并为B和C的每个实例提供相应接口的引用(shared_ptr)。这样,每个接口只有一个对象。也许这已经过早优化以减少应用程序的内存占用。

有没有办法进一步改进这种设计或采取完全不同的方法?

1 个答案:

答案 0 :(得分:2)

可能不是一个完整的答案,只是我的想法。

缺点:

  • 介绍了额外的接口类
  • 额外间接,每次支持的电话额外维护
  • 构造:指向对象的接口需要额外的工厂
  • 弱指针:解决指针变为悬空的情况

优点:

  • 明确控制班级的接口
  • 在整个生命周期内的额外安全性(可以检查,但也应该处理)
  • 对象需要有限的更改(朋友?)

关于每个接口的1个实例:占用空间略低,但是您需要额外管理才能访问该1个实例。