C ++로 어댑터 디자인 패턴 UML을 배우려고하는데 YouTube의 동영상 중 하나에서이 콘텐츠를 표시했습니다. 내 문제는 UML 그림을 C ++ 클래스 / 코드로 번역하는 것입니다.
내가 정말로 혼란스러워하는 것은 :
인터페이스 Target에 대한 Clinet -------> [실선] 연결. 이것이 의미하는 바는 일반적으로 Adapter 클래스가 Target을 구현하는 것과 같은 인터페이스를 구현하는 클래스를 보았습니다.
콘텐츠 어댑터가 어댑터와 함께 구성된다는 것은 여기서 무엇을 의미합니다. 컨테이너 선인 경우 전체 또는 부분적으로 소유합니까?
다음은 내가 생각할 수있는 코드 구현입니다.
class Target
{
public:
void virtual ServiceA() = 0;
};
class Client : public Target
{
public:
Client(){}
void ServiceA() override {}
};
class Adaptee
{
public:
Adaptee(){}
void ServiceX(){}
};
class Adapter : public Target
{
public:
Adapter(){}
void ServiceA() override {adaptee.serviceX();}
Adaptee adaptee;
};
int main()
{
.....
}
메인 내부에서 어떻게 코딩할까요? 설명 해주십시오.
인터페이스 Target에 대한 Clinet -------> [실선] 연결. 이것이 의미하는 바는 일반적으로 Adapter 클래스가 Target을 구현하는 것과 같은 인터페이스를 구현하는 클래스를 보았습니다.
아니, 클라이언트 을 상속 / 구현하지 않는 대상 그래서,
class Client : public Target {
...
};
잘못되었습니다.
연결은 실제 유형이 Adapter 인 경우 에도 Client 에 속성 유형 Target 이 있음을 나타낼 수 있으며 , 인터페이스 Target 은 Adapter 를 숨기는 데 사용됩니다 . 물론 C ++ 속성의 유형은 속성 을 관리하는 방법에 대한 포인터 가 아닙니다 .Target
그러나 연관은 종속성이 더 나은 경우에도 클라이언트 가 대상을 보거나 사용 한다는 것을 표시하는 데만 사용할 수 있습니다 ( 어댑터 및 연관된 Adaptee 대신 ). Adapter 의 인스턴스 는 C ++ 또는 Target에 대한 포인터를 관리하는 다른 방법으로 입력 된 매개 변수를 통해 Client 의 작업에 제공 될 수 있습니다.Target *
콘텐츠 어댑터가 어댑터와 함께 구성된다는 것은 여기서 무엇을 의미합니다. 컨테이너 선인 경우 전체 또는 부분적으로 소유합니까?
어댑터 관련 필요로 그 Adaptee를 다중성은 1,하지만하지 않도록 협회가 구성되지 않습니다주의 완전히 소유 내가 아니라 당신이 무슨 뜻인지 이해합니다. 다이어그램의 메모가 구성 에 대해 말하는 경우에도 연결은 집계가 아닙니다 .
메인 내부에서 어떻게 코딩할까요? 설명 해주십시오.
프로그램은 다음과 같습니다.
#include <iostream>
class Target {
public:
virtual void serviceA() = 0;
};
class Adaptee {
public:
void serviceX() { std::cout << "serviceX" << std::endl; }
};
class Adapter : public Target {
public:
Adapter(Adaptee & a) : adaptee(a) {}
virtual void serviceA() { adaptee.serviceX(); }
private:
Adaptee & adaptee;
};
class Client {
public:
void work(Target & t) { t.serviceA(); }
};
int main()
{
Adaptee adaptee;
Adapter adapter(adaptee);
Client client;
client.work(adapter);
}
컴파일 및 실행 :
pi@raspberrypi:/tmp $ g++ -Wall c.cc
pi@raspberrypi:/tmp $ ./a.out
serviceX
pi@raspberrypi:/tmp $
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다