2013-08-10 3 views
2

나는 작업래퍼 또는 대리인 또는 에이전트입니까?

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

을 할 수있는 클래스가 그리고 A에 대한 포인터를 포함하는 다른 클래스가 있고 A을 통해 작업을하고 제작하지 죄송 단지 pimpl (아닌 다른 회원이 내 제 1 판에서는 질문이 명확합니다.) B으로 전화 하시려면 0120- 래퍼, 대리인 또는 에이전트? 아니면 그들은 같은 개념으로 다른 이름일까요? The delegated처럼 A에 전화하는 방법?

제 경우에는 B가 GUI 레벨이고 A가 도메인 로직 레벨입니다. 이것들을 호출하는 방법? 그리고 B가 자체 데이터를 가지고 있고 데이터가 A를 생성하는 데 사용될 수 있다면? 이 관계를 호출하는 방법? 감사.

+2

또는 – billz

+2

@billz'PIMPL' 호출 : 그것은 PIMPL, 클래스 정의 내에서 주어진 B : DO의 몸이 아니다가 필요 컴파일러는 A :: do에 대해 알고 있습니다. 이것은 컴파일러가 PIMPL의 목표를 무효로하는 B의 정의를 컴파일하는 동안 A의 정의를 요구합니다. – liori

+0

@liori 놀라운 통찰력! – user1899020

답변

1

B의 의미는이 작은 코드 스 니펫에서 확실하게 추론 할 수 없습니다. 구조적으로 이것은 composition 클래스의 경우이며 B 클래스의 목적에 따라 래퍼, 데코레이터, 어댑터, 프록시/대리자 등을 만드는 데 사용할 수 있습니다.

B이 계승 된 경우 A은 데코레이터 또는 래퍼입니다. B에 암시 적 변환 연산자 A이 포함 된 경우 대리 또는 프록시가됩니다. B이 다른 계약의 동작을 구현하는 데 A을 사용하면 어댑터가됩니다. 그러나 이러한 모든 개념은 상속 및 구성과 같은 언어의 "기본 구성 요소"보다 더 높은 수준이므로 시스템의 다른 클래스 중에서 AB이라는 더 넓은 사용 컨텍스트가 필요합니다. .

+0

매우 지식이 있습니다.내 경우, B는 GUI 수준이고 A는 도메인 논리 수준입니다. 이것들을 호출하는 방법? B가 자체 데이터를 가지고 있고 데이터가 A를 생성하는 데 사용될 수 있다면? 이 관계를 호출하는 방법? 감사. – user1899020

+2

@ user1899020 'B'가 UI이고 'A'가 도메인 논리 인 경우 [MVC 패턴] (http://en.wikipedia.org/wiki/Model%E2%80%93view%E2)의 어휘를 적용 할 수 있습니다. % 80 % 93controller),'A'a * model *을 호출하고,'B'는'A'' * view *를 호출합니다. – dasblinkenlight

1

대리인은 도우미 개체이므로 하위 클래 싱없이 위임하는 개체의 동작을 변경할 수 있습니다. 그것은 잘 알려진 디자인 패턴입니다.

래퍼가 대리인과 같지 않습니다. W 래퍼는 façade 패턴에서와 같이 어떤 이유로 인터페이스를 객체로 변경하는 데 사용되는 클래스입니다.

위의 패턴 중 하나 또는 다른 것을 구현하는 데 사용할 수있는 단순한 포함 코드입니다. 우리는 물체들 사이의 관계가 무엇인지 말할 수 없으므로 그것이 특정 패턴이라고 말할 수는 없습니다.

0

의미론으로 마무리되었습니다. 다른 클래스를 제어하는 ​​클래스가 있습니다. 실제로이 클래스가 호출되는 것을 의미합니까?

start 메서드가있는 uploaderQueue 클래스와 함께 start 메서드가있는 업 로더 클래스가있는 것과 같습니다. 큐는 파일을 관리하고 필요한 경우 upload 메서드를 호출합니다.

위임입니다. 필요에 따라 작업을 수행하십시오.

에 의해 소비되지 마십시오 '디자인 패턴'

+0

올바른 이름을 사용하면 관계에 대해 더 쉽게 의사 소통 할 수 있기 때문에 * 관계가 * 중요합니다. 이것은 디자인 패턴의 포인트입니다. 여기에서 유일한 문제는 관계가 무엇인지 말할 수있는 충분한 세부 사항이 없다는 것입니다. – Caleb

관련 문제