我想爲C++中提供多個接口的問題提出一個優雅的解決方案。 假設我們有B,C和D類.B和C需要定製/控制對A類的訪問,而D可以直接訪問。提供這種接口的解決方案需要可擴展。未來的接口可能只針對一個特定的類。一個類的多個接口
當前我正在創建引用類A的接口類(IA_1,IA_2)。B和C將提供這些接口的實例,並且可以以定製/受控方式分別通過IA_1和IA_2訪問A.下圖描述了這種情況。
這有實現一個新的接口時,我不需要觸碰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,因爲我不想類它們僅訪問一個參與其生命週期管理。
目前我正在爲B或C的每個實例創建一個接口對象,儘管它們都是一樣的。我已經考慮過只創建一個接口對象,並給每個B和C的實例一個相應接口的引用(shared_ptr)。這樣我就只有一個對象用於每個接口。也許這已經是過早優化的情況,以減少應用程序的內存佔用。
有沒有辦法進一步改進這種設計或採取完全不同的方法?
您的UML令人困惑,因爲連接線是顛倒的([請參閱wikipedia](https://en.wikipedia。org/wiki/Object_composition#UML_notation)) – stefaanv
好像對我來說過早的悲觀。讓N個弱指針指向一個對象比N指向一個指向對象的弱指針的共享指針要好。 – user2079303
@stefaanv你是對的。我糾正了UML圖。 – Stan