我正在努力想出一个优雅的解决方案来解决在C ++中为类提供多个接口的问题。 假设我们有B,C和D类.B和C需要定制/控制访问A类,而D可以直接访问。提供此类接口的解决方案需要是可扩展的。未来的接口可能只适用于一个特定的类。
目前我正在创建接口类(IA_1,IA_2),它们引用了类A.B和C将提供这些接口的实例,并且可以以自定义/受控方式分别访问A到IA_1和IA_2。情况如下图所示。
这样做的好处是,在实现新界面时我不需要触摸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)。这样,每个接口只有一个对象。也许这已经过早优化以减少应用程序的内存占用。
有没有办法进一步改进这种设计或采取完全不同的方法?
答案 0 :(得分:2)
可能不是一个完整的答案,只是我的想法。
缺点:
优点:
关于每个接口的1个实例:占用空间略低,但是您需要额外管理才能访问该1个实例。