파사드 패턴
Facade pattern전면 패턴(Facade)은 객체 지향 프로그래밍에서 일반적으로 사용되는 소프트웨어 설계 패턴이다.아키텍처의 전면과 유사하게, 전면은 보다 복잡한 기초 또는 구조 코드를 가리는 전면 인터페이스의 역할을 하는 객체다.전면은 다음을 수행할 수 있다.
- 단일(일반적으로 단순화된) API 뒤에 있는 보다 복잡한 구성요소와의 상호작용을 마스킹하여 소프트웨어 라이브러리의 가독성과 사용성 향상
- 보다 일반적인 기능에 컨텍스트별 인터페이스 제공(컨텍스트별 입력 유효성 검사 완료)
- 보다 느슨하게 처리된 코드를 선호하여 단일형 또는 긴밀하게 연결된 시스템의 광범위한 리팩터를 위한 시작점이 되다.
개발자들은 시스템이 상호의존적인 클래스가 많거나 소스 코드를 사용할 수 없기 때문에 시스템이 매우 복잡하거나 이해하기 어려울 때 종종 전면 설계 패턴을 사용한다.이 패턴은 더 큰 시스템의 복잡성을 숨기고 고객에게 더 간단한 인터페이스를 제공한다.일반적으로 클라이언트가 요구하는 멤버 집합을 포함하는 단일 래퍼 클래스를 포함한다.이들 회원은 전면 클라이언트를 대신하여 시스템에 접속하고, 구현 세부사항을 숨긴다.
개요
파사드 설계 패턴은 반복적인 설계 문제를 해결하여 유연하고 재사용 가능한 객체 지향 소프트웨어, 즉 구현, 변경, 테스트 및 재사용하기 쉬운 객체를 설계하는 방법을 설명하는 23가지 GoF 설계 패턴 중 하나이다.
파사드 디자인 패턴이 해결할 수 있는 문제는 무엇인가?[2]
- 복잡한 서브시스템을 사용하기 쉽게 하기 위해서는 서브시스템의 인터페이스 세트를 위한 간단한 인터페이스가 제공되어야 한다.
- 하위 시스템의 종속성을 최소화해야 한다.
복잡한 서브시스템에 직접 접속하는 클라이언트는 서로 다른 인터페이스(긴장 결합)를 가진 여러 가지 다른 객체를 (에 따라) 지칭하는 것으로, 이는 클라이언트를 구현, 변경, 테스트 및 재사용하기 어렵게 만든다.
파사드 설계 패턴은 어떤 솔루션을 설명하고 있는가?
정의 aFacade
라고 이의를 제기하다.
- 서브시스템의 인터페이스에 (위임으로써) 간단한 인터페이스를 구현한다.
- 요청을 전달하기 전/후에 추가 기능을 수행할 수 있다.
이렇게 하면Facade
하위 시스템의 종속성을 최소화하기 위한 개체.
아래 UML 클래스 및 시퀀스 다이어그램을 참조하십시오.
사용법
파사드(Facade)는 기본 개체에 대한 보다 쉽고 단순한 인터페이스를 원할 때 사용된다.[3]또는 래퍼가 특정 인터페이스를 존중해야 하고 다형성 동작을 지원해야 할 때 어댑터를 사용할 수 있다.실내 장식자는 런타임에 인터페이스의 동작을 추가하거나 변경할 수 있도록 한다.
패턴 | 의도 |
---|---|
어댑터 | 클라이언트가 기대하는 것과 일치하도록 한 인터페이스를 다른 인터페이스로 변환 |
장식가 | 원래 코드를 감싸 인터페이스에 동적으로 책임감 추가 |
파사드 | 간소화된 인터페이스 제공 |
전면 패턴은 일반적으로 다음과 같은 경우에 사용된다.
- 복잡한 시스템에 접근하려면 간단한 인터페이스가 필요하다.
- 시스템은 매우 복잡하거나 이해하기 어렵다.
- 각 레벨의 레이어드 소프트웨어에 진입점이 필요하다.
- 서브시스템의 추상화와 구현은 긴밀하게 결합되어 있다.
구조
UML 클래스 및 시퀀스 다이어그램
이 UML클래스 다이어그램에서Client
클래스가 하위 시스템 클래스에 직접 액세스하지 않음대신, The는Client
을 통해 작용하다.Facade
서브시스템 클래스(위임)의 관점에서 간단한 인터페이스를 구현하는 클래스(위임)Class1
,Class2
그리고Class3
. The.Client
단순한 것에만 의존한다.Facade
인터페이스 및 복잡한 서브시스템과는 독립적이다.[4]
시퀀스 다이어그램은 런타임 교호작용을 보여준다.그Client
사물이 a를 통해 작용하다.Facade
요청을 에 위임하는 대상Class1
,Class2
그리고Class3
요청을 수행하는 인스턴스
UML 클래스 다이어그램
- 파사드
- 전면 클래스는 나머지 애플리케이션에서 패키지 1, 2, 3을 추상화한다.
- 클라이언트
- 개체는 패키지의 리소스에 액세스하기 위해 페이사이드 패턴을 사용하고 있다.
예
이는 클라이언트("당신")가 복잡한 시스템(CPU나 하드드라이브와 같은 내부 컴퓨터 부품)에 대해 전면("컴퓨터")과 어떻게 상호작용하는지를 보여주는 추상적인 예다.
C++
구조상의 CPU { 공허하게 하다 얼다(); 공허하게 하다 점프(장기의 포지션); 공허하게 하다 실행(); }; 구조상의 하드드라이브 { 마를 뜨다* 읽다(장기의 lba, 인트로 사이즈를 맞추다); }; 구조상의 기억력 { 공허하게 하다 적재(장기의 포지션, 마를 뜨다* 자료); }; 계급 컴퓨터팩케이드 { 공중의: 공허하게 하다 시작() { cpu_.얼다(); memory_.적재(kBootAddress, 하드_드라이브_.읽다(kBootSector, kSectorSize)); cpu_.점프(kBootAddress); cpu_.실행(); } 사유의: CPU cpu_; 기억력 memory_; 하드드라이브 하드_드라이브_; }; 인트로 본래의() { 컴퓨터팩케이드 컴퓨터; 컴퓨터.시작(); }
참고 항목
참조
- ^ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. pp. 185ff. ISBN 0-201-63361-2.
{{cite book}}
: CS1 maint : 복수이름 : 작성자 목록(링크) - ^ "The Facade design pattern - Problem, Solution, and Applicability". w3sDesign.com. Retrieved 2017-08-12.
- ^ Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy; Bates, Bert (2004). Hendrickson, Mike; Loukides, Mike (eds.). Head First Design Patterns (paperback). Vol. 1. O'Reilly. pp. 243, 252, 258, 260. ISBN 978-0-596-00712-6. Retrieved 2012-07-02.
- ^ "The Facade design pattern - Structure and Collaboration". w3sDesign.com. Retrieved 2017-08-12.
외부 링크
위키북 컴퓨터 과학 디자인 패턴에는 다음과 같은 주제의 페이지가 있다:다양한 언어로 된 파사드 구현 |
위키미디어 커먼즈에는 파사드 패턴과 관련된 미디어가 있다. |