C++ 클래스에 다중 인터페이스를 제공하는 문제에 대한 우아한 해결책을 제시하려고합니다. 클래스 B, C 및 D가 있다고 가정합니다. B와 C는 클래스 A에 대한 사용자 정의/제어 액세스가 필요하지만 D는 직접 액세스 할 수 있어야합니다. 이러한 인터페이스를 제공하는 솔루션은 확장 가능해야합니다. 미래의 인터페이스는 하나의 특정 클래스에 대해서만 전문화 될 수 있습니다.하나의 클래스에 대한 다중 인터페이스
현재 클래스 A에 대한 참조가있는 인터페이스 클래스 (IA_1, IA_2)를 만들고 있습니다. 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를 얻을.
현재 B 또는 C의 모든 인스턴스에 대해 인터페이스 개체를 만들고 있는데, 모두 동일한 작업을 수행하고 있습니다. 나는 이미 단 하나의 인터페이스 객체를 생성하고 B와 C의 모든 인스턴스에 해당 인터페이스의 참조 (shared_ptr)를 제공 할 것을 고려했다. 그렇게하면 모든 인터페이스에 대해 하나의 객체 만 갖게됩니다. 어쩌면 이것은 이미 응용 프로그램의 메모리 사용량을 줄이기위한 조기 최적화의 경우 일 수 있습니다.
이 디자인을 개선하거나 전혀 다른 접근 방식을 사용할 수 있습니까?
연결선이 바뀌어 UML이 혼란 스럽습니다 ([wikipedia 참조] (https : //en.wikipedia.org/wiki/Object_composition # UML_notation)) – stefaanv
대신 조기 비참하게 보입니다. 객체에 대한 약한 포인터를 N 개 갖는 것은 객체에 대한 약한 포인터에 대한 N 개의 공유 포인터를 가지는 것보다 낫습니다. – user2079303
@stefaanv 맞습니다. UML 다이어그램을 수정했습니다. – Stan