외관 모드 : Facade Mode라고도합니다 : 외관 정면은 서브 시스템의 인터페이스 세트에 대한 일관된 인터페이스를 제공 하여이 서브 시스템 세트를 사용하기 쉽게 만듭니다 (새로운 모양 역할을 도입하여 원래 시스템의 복잡성을 줄이면서 클라이언트 클래스와 서브 시스템 간의 커플 링을 줄입니다).
이미지 출처 : 설계 패턴 : 재사용 가능한 객체 지향 소프트웨어의 기초.
성취하다
사례 요구 사항 : 집을 임대하십시오
집을 찾아 집을 임대하는 학생들은 집을 찾는 것이 매우 고통 스럽다는 것을 깨달을 수 있습니다. 그들은 지역 사회에서 공동체로 달려야 할뿐만 아니라 집주인과 협상해야합니다 (두 번째). 그래서 그들은 똑똑하고 더 이상 방문하지 않는 법을 배웠지 만 Lianjia와 같은 부동산 중개인을 직접 찾아 가족을 사랑합니다. 그들은 손에 일정량의 주택 공급이 있습니다. 우리는 그들에게 커미션을 지불하면 우리를 대신하여 집주인과 협상 할 수 있습니다. 그들 대부분은 매우 전문적이며 시간과 돈을 절약합니다. 현재 부동산 중개인은 외관이며 집의 임차인은 하위 시스템 하위 시스템입니다.
정면
외관 클래스 : 요청을 처리 할 수있는 서브 시스템을 알고 클라이언트의 요청을 적절한 서브 시스템 객체에 프록시합니다.
공공 계급 중간 점 {private cuiyuanapartment cuiyuan; 개인 XIXIAPARTMENT XIXI; 개인 Xihuapartment Xihu; Public Mediumfacade () {Cuiyuan = New Cuiyuanapartment ( "Cuiyuan Community", 900, 1); XIXI = 새로운 XIXIAPARTMENT ( "Xixi Garden", 1200, 1); xihu = 새로운 xihuapartment ( "Xihu Community", 2600, 1); } public void Rentinghouse (이중 가격) {// 가격은 적절하고 if (price> = cuiyuan.getPrice () && cuiyuan.getStatus ()! = 0) {System.out.println ( "구독" + cuiyuan.getLocation ()); cuiyuan.setstatus (0); } else if (price> = xixi.getPrice () && xixi.getStatus ()! = 0) {System.out.println ( "구독" + xixi.getLocation ()); xixi.setstatus (0); } else if (price> = xihu.getPrice () && xihu.getStatus ()! = 0) {System.out.println ( "예약" + xihu.getLocation ()); xih.setstatus (0); } else {System.out.println ( "너무 낮은/목록이 없음 ..."); }}} 하위 시스템
서브 시스템 컬렉션 : 서브 시스템 기능을 구현하고 Facade 객체가 할당 한 작업을 처리합니다 (서브 시스템에는 외관 정보가 없음, 즉 Facade Object Reference가 없습니다).
/** * @author jifang * @since 16/8/23 10:12 AM. */public class xihuapartment {개인 문자열 위치; 개인 이중 가격; 개인 int 상태; public xihuapartment (문자열 위치, 이중 가격, int 상태) {this.location = location; this.price = 가격; this.status = 상태; } public String getLocation () {return location; } public double getPrice () {반환 가격; } public int getStatus () {return status; } public void setstatus (int status) {this.status = 상태; }} 클래스 XIXIAPARTMENT {개인 문자열 위치; 개인 이중 가격; 개인 int 상태; public xixiapartment (문자열 위치, 이중 가격, int 상태) {this.location = location; this.price = 가격; this.status = 상태; } public String getLocation () {return location; } public double getPrice () {반환 가격; } public int getStatus () {return status; } public void setstatus (int status) {this.status = 상태; }} 클래스 Cuiyuanapartment {개인 문자열 위치; 개인 이중 가격; 개인 int 상태; Public Cuiyuanapartment (문자열 위치, 이중 가격, int 상태) {this.location = location; this.price = 가격; this.status = 상태; } public String getLocation () {return location; } public double getPrice () {반환 가격; } public int getStatus () {return status; } public void setstatus (int status) {this.status = 상태; }} 고객
이런 식으로, 고객은 단순히 부동산 중개인에게 연락하여 우리에게 견적을 제공하며, 만나는 모든 집주인에게 연락하는 데 도움이 될 것입니다.
공개 클래스 클라이언트 {@test public void client () {mediumfacade facade = new MediumFacade (); 정면. 렌 팅 하우스 (800); }}요약
객체 지향 개발에 대한 경험이있는 학생들은 외모 패턴에 대해 들어 본 적이 없어도 그를 사용했을 수도 있습니다. 왜냐하면 그는 의존성 반전 원칙과 Dimit의 법칙에 대한 아이디어를 완벽하게 구현하기 때문입니다.
사용
우선, 디자인의 초기 단계에서는 클래식 3 층 아키텍처와 같은 의식적으로 분리되어 있어야하며, 층 사이의 외관을 설정하여 복잡한 서브 시스템에 대한 간단한 인터페이스를 제공하고 커플 링 정도를 크게 줄일 수 있습니다.
둘째, 개발 단계에서, 하위 시스템은 종종 지속적인 재구성으로 인해 점점 더 복잡해집니다. Facade를 추가하면 간단한 인터페이스를 제공하고 모듈 간의 종속성을 줄일 수 있습니다.
셋째, 레거시 시스템을 유지할 때 시스템을 유지하고 확장하기가 매우 어려울 수 있지만 매우 중요한 기능이 포함되어 있으므로 새로운 요구 사항에 따라 의존해야합니다. 현재 새로운 시스템을 위해 외관을 개발할 수 있으며, 거칠거나 복잡한 레거시 코드를 설계하기위한 비교적 명확하고 간단한 인터페이스를 제공하여 새로운 시스템이 Facade와 상호 작용할 수 있으며 Facade는 모든 복잡한 작업에 대한 레거시 코드와 상호 작용합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.