wikipedia article으로 확인했는데 코드 예제의 C++ 버전이 누락 된 것처럼 보입니다. 나는 이것이 없으면 Facade 패턴을 완전히 고맙게 생각할 수 없다. C++을 사용하여 나를 설명하는 것을 도울 수 있겠는가?C + + 예제를 사용하여 Facade 패턴을 설명 하시겠습니까?
답변
외관 패턴 : 복잡한 하위 시스템 또는 인터페이스 세트에 통일되고 단순화 된 인터페이스를 제공합니다. 복잡한 서브 시스템과 클라이언트를 동시에 분리하는 고급 인터페이스를 제공합니다.
택시 운전사를 이해하는 데 도움이되는 예제입니다. 택시 운전사에게 'Take me to PointX'(통일 된 단순화 된 고급 인터페이스)를 말하면 누가 일련의 동작 (키를 돌리고, 기어를 바꾸고, 가속기 등을 눌러 ...)을 시작하여 작업을 수행합니다. 그는 서브 시스템 (기어 박스, 엔진 등)의 복잡성을 추상화하여 사용자가 걱정하지 않아도됩니다. 운전자는 사용 된 실제 차량에서 당신을 분리합니다 ... 자동차와 직접 인터페이스하지 않습니다. 당신은 잠재적으로 그에게 Merc를 줄 수 있었다. 그러나 운전자와 당신의 인터페이스는 여전히 TakeMeTo (X) 일 것이다. 당신은 어떤 특정 모델/차종에 묶여 있지 않다.
실세계 예에서 타사 구성 요소 또는 라이브러리와 상호 작용하는 외관을 찾을 수 있습니다. 코드가 특정 공급 업체에 의존하는 것을 원하지 않으므로 분리 할 facade 인터페이스를 도입하십시오. 또한이 인터페이스를 단순화 할 것입니다. Facade 인터페이스는 SendData (string)라는 메소드를 가지지 만, 내부적으로 구현은 특정 순서로 m 개의 서브 패키지에 대해 n 개의 메소드를 호출하여 태스크를 완료 할 수 있습니다. 이것은 위키피디아 페이지의 다이어그램이 보여주는 것입니다.
C에 an example 번역 ++와 C++에서 WWW 것은 작은 여기
sResource = LWCPPSimple::get("http://www.perl.org")
가상 라이브러리를 유지하는 것은 내가 리소스를 가져 오는 나의 주된 관심사에 집중할 수 있도록 문제의 프로토콜, 네트워크 및 구문 분석 측면을 통합 외관입니다 . get 메소드는 HTTP, FTP 및 기타 다양한 프로토콜, 요청 - 응답, 연결 관리 등의 복잡성 (경우에 따라 추함)을 숨기거나 캡슐화하거나 유지합니다. 또한 내일이면 LWCPPSimple의 작성자가 get()을 두 배 빠르게 만드는 방법은 무료로 성능상의 이점을 얻습니다. 내 클라이언트 코드는 변경할 필요가 없습니다.
와우. 나는이 설명을 좋아한다. 내 말은, Facade가 무엇인지는 알았지 만 이것은 대단한 것입니다. –
기쁜 당신은 그것을 좋아했다 :) – Gishu
큰 설명,이 코드 예제 답변으로 잘 갈 수 있습니다. http://stackoverflow.com/questions/249581/explain-facade-pattern-with-c-example#249995 –
나는 C# 예제에서 검색과 바꾸기를했다. 당신은 C를 이해한다면이 같은 구조 및 키워드 (클래스, 함수, 네임 스페이스, 공공 등) 어떤 의미에서
// "Subsystem ClassA"
#include <iostream>
class SubSystemOne
{
public:
void MethodOne()
{
std::cout << " SubSystemOne Method" << std::endl;
}
}
// Subsystem ClassB"
class SubSystemTwo
{
public:
void MethodTwo()
{
std::cout << " SubSystemTwo Method" << std::endl;
}
}
// Subsystem ClassC"
class SubSystemThree
{
public:
void MethodThree()
{
std::cout << " SubSystemThree Method" << std::endl;
}
}
// Subsystem ClassD"
class SubSystemFour
{
public:
void MethodFour()
{
std::cout << " SubSystemFour Method" << std::endl;
}
}
// "Facade"
class Facade
{
SubSystemOne one;
SubSystemTwo two;
SubSystemThree three;
SubSystemFour four;
public:
Facade()
{
}
void MethodA()
{
std::cout << "\nMethodA() ---- " << std::endl;
one.MethodOne();
two.MethodTwo();
four.MethodFour();
}
void MethodB()
{
std::cout << "\nMethodB() ---- " << std::endl;
two.MethodTwo();
three.MethodThree();
}
}
int Main()
{
Facade facade = new Facade();
facade.MethodA();
facade.MethodB();
return 0;
}
을 사용하기 때문에 ++ 다음은 C#을 이해할 수 있어야하기 때문에, 도움이되지 않을 수도 있습니다 Facade는 숨겨진 기능과 상호 작용하려는 클라이언트를위한 API 일뿐입니다.
Facade는 C++로 구현되거나 API보다 복잡한 간단한 C API를 노출 할 때 유용합니다. 또는 라이브러리가 반복적 인 업데이트를 거쳐야하고 클라이언트에 가능한 한 영향을 미치기를 원할 때 클라이언트와 라이브러리간에 고정 된 장벽을 확보 할 수 있습니다. 예를 들어, C 기반 라이브러리를 내부적으로 C++ 또는 다른 것으로 업데이트해야하거나 전혀 다른 것으로 교체 한 경우 Facade는 클라이언트의 중간 계층입니다.
Facade에 대해 C++ examples이 있으며이 우수한 디자인 패턴 사이트에 있습니다.
class Engine
{
public:
void Start() { }
};
class Headlights
{
public:
void TurnOn() { }
};
// That's your facade.
class Car
{
private:
Engine engine;
Headlights headlights;
public:
void TurnIgnitionKeyOn()
{
headlights.TurnOn();
engine.Start();
}
};
int Main(int argc, char *argv[])
{
// Consuming facade.
Car car;
car.TurnIgnitionKeyOn();
return 0;
}
class A {
private B b; // Class A uses Class B, the "interface"
public int f() { return b.g(); }
};
class B {
private C c; // class B uses class C, a "subsystem"
private ... ...; // other subsystems can be added
public int g() { c.h(); return c.i(); }
};
class C { // a subsystem
public void h() { ... }
public int i() { return x; }
};
클래스 A는 직접 방법을 사용하거나 직접 클래스 C 또는 클래스 B에 포함 된 다른 서브 시스템의 상태에 영향을 미치지 않습니다. 하위 시스템의 수와 상관 없으므로 여기에 하나의 하위 시스템 만 표시됩니다.
- 1. remoting에 facade 패턴을 사용 하시겠습니까?
- 2. EJB 세션 빈에 Facade 패턴을 사용하는 이유
- 3. ORM 패키지가 Facade 또는 Adapter 패턴을 구현합니까?
- 4. AppFabric 캐싱 예제를 사용하여 C#
- 5. Decorator 및 Facade 패턴은 C#
- 6. 설명 CRF (조건부 난수 필드)가 예제를 사용하여 작동하는 방식
- 7. Windows에서 dlib 예제를 컴파일 하시겠습니까?
- 8. Invoke 패턴을 삭제 하시겠습니까?
- 9. 특수 패턴을 사용하여 NSMutableArray를 정렬 하시겠습니까?
- 10. Javascript가 RegExp를 사용하여 문자열 패턴을 대체 하시겠습니까?
- 11. 디자인 패턴을 제안 하시겠습니까?
- 12. TwitPic API cURL 예제를 C#, multipart data로 이식 하시겠습니까?
- 13. Facade 클래스 외부에서 오브젝트를 작성하십시오. Facade 패턴이 손상됩니까?
- 14. Facade Class에서 데이터를 분리해야합니까?
- 15. 클라이언트를위한 전체 텍스트 검색 방법을 설명 하시겠습니까?
- 16. Java 인터페이스를 설명 하시겠습니까?
- 17. Java에서 다형성을 설명 하시겠습니까?
- 18. Facade 디자인 패턴의 단점은 무엇입니까?
- 19. 거대한 if 문 - 디자인 패턴을 단순화 하시겠습니까?
- 20. 방문자 패턴을 C#
- 21. 리포지토리 패턴을 C#
- 22. 평신도에게 배열의 이점을 설명 하시겠습니까?
- 23. 도메인 이벤트 패턴을 사용하여
- 24. C++ 비트 패턴을 Java로 변환
- 25. "facade"테이블을 만드는 방법은 무엇입니까?
- 26. DTO 패턴을 사용하여 두 개의 스키마를 동기화 하시겠습니까?
- 27. 공개 키 예제를 사용하여 XML 서명하기?
- 28. 파이썬 엔트리 포인트를 설명 하시겠습니까?
- 29. jvm 메모리 구조를 설명 하시겠습니까?
- 30. Mathematica를 사용하여 계수 패턴을 찾는 방법
이 기사에 대한 링크를 제공해 주시겠습니까? –
http://en.wikipedia.org/wiki/Facade_pattern – yesraaj
질문 편집은 다른 사람들에게 도움이 될 것입니다. – tonylo