1. 의도
하위 시스템의 인터페이스 집합에 일관된 인터페이스를 제공하기 위해 Facade 패턴은 상위 수준 인터페이스를 정의하여 하위 시스템을 더 쉽게 사용할 수 있도록 합니다. [GOF95]
외부와 하위 시스템 간의 통신은 Facade 객체를 통해 이루어집니다.
2. 파사드 모드 구조도
3. 정면 모드의 주요 캐릭터
파사드 역할:
이 역할은 클라이언트에 의해 호출됩니다
요청 처리를 담당하는 하위 시스템을 파악하세요
적절한 하위 시스템에 사용자 요청 할당
하위 시스템 역할:
하위 시스템의 기능 구현
Facade 객체에 의해 할당된 프로세스 작업
Facade 관련 정보가 없으며, 클라이언트가 직접 호출 가능
동시에 하나 이상의 하위 시스템이 있을 수 있으며, 각 하위 시스템은 별도의 클래스가 아니라 클래스의 모음입니다. 각 하위 시스템은 클라이언트 또는 Facade 역할에 의해 직접 호출될 수 있습니다. 서브시스템은 파사드 패턴의 존재를 인식하지 못합니다. 서브시스템의 경우 파사드는 또 다른 클라이언트일 뿐입니다.
4. 파사드 모델의 장점
1. 서브시스템 구성요소를 고객으로부터 보호하여 고객이 처리하는 객체 수를 줄이고 서브시스템을 더욱 편리하게 사용할 수 있도록 합니다
2. 하위 시스템과 고객 간의 느슨한 결합 관계 달성
3. 필요한 경우 애플리케이션이 하위 시스템 클래스를 사용하는 것을 제한하지 않습니다. 따라서 시스템 사용 편의성과 유용성 중에서 선택할 수 있습니다
5. Facade 모드 적용 시나리오
1. 일부 복잡한 하위 시스템을 위한 인터페이스 세트 제공
2. 하위 시스템의 독립성 향상
3. 계층 구조에서 파사드 패턴을 사용하여 시스템의 각 레이어 인터페이스를 정의할 수 있습니다
6. 파사드 모드 및 기타 모드
추상 팩토리 패턴: 추상 팩토리 패턴은 Facade 패턴과 함께 사용되어 서브시스템 독립적인 방식으로 서브시스템 객체를 생성하는 데 사용할 수 있는 인터페이스를 제공할 수 있습니다. Abstract Factory 모드는 Facade 모드를 대체하여 플랫폼 관련 클래스를 숨길 수도 있습니다
Mediator 패턴: Mediator 패턴과 Facade 패턴의 유사점은 기존 클래스의 기능을 추상화한다는 것입니다. 그러나 Mediator의 목적은 일반적으로 단일 객체에 속하지 않는 기능에 초점을 맞춰 동료 간의 임의 통신을 추상화하는 것입니다. Mediator의 동료 객체는 동일한 유형의 다른 객체와 직접 통신하는 대신 중재자를 인식하고 중재자와 통신합니다. 상대적으로 말하면 Facade 패턴은 서브시스템 객체의 인터페이스를 추상화하여 사용하기 쉽게 만들 뿐이며 기능을 정의하지 않으며 서브시스템은 Facade의 존재를 알지 못합니다.
싱글턴 모드: 일반적으로 Facade 객체는 하나만 필요하므로 Facade 객체는 일반적으로 Singleton 객체에 속합니다.
7. 파사드 모드 PHP 예제
<?php class Camera { /** * 打开录像机 */ public function turnOn() { echo 'Turning on the camera.<br />'; } /** * 关闭录像机 */ public function turnOff() { echo 'Turning off the camera.<br />'; } /** * 转到录像机 * @param <type> $degrees */ public function rotate($degrees) { echo 'rotating the camera by ', $degrees, ' degrees.<br />'; } } class Light { /** * 开灯 */ public function turnOn() { echo 'Turning on the light.<br />'; } /** * 关灯 */ public function turnOff() { echo 'Turning off the light.<br />'; } /** * 换灯泡 */ public function changeBulb() { echo 'changing the light-bulb.<br />'; } } class Sensor { /** * 启动感应器 */ public function activate() { echo 'Activating the sensor.<br />'; } /** * 关闭感应器 */ public function deactivate() { echo 'Deactivating the sensor.<br />'; } /** * 触发感应器 */ public function trigger() { echo 'The sensor has been trigged.<br />'; } } class Alarm { /** * 启动警报器 */ public function activate() { echo 'Activating the alarm.<br />'; } /** * 关闭警报器 */ public function deactivate() { echo 'Deactivating the alarm.<br />'; } /** * 拉响警报器 */ public function ring() { echo 'Ring the alarm.<br />'; } /** * 停掉警报器 */ public function stopRing() { echo 'Stop the alarm.<br />'; } } /** * 门面类 */ class SecurityFacade { /* 录像机 */ private $_camera1, $_camera2; /* 灯 */ private $_light1, $_light2, $_light3; /* 感应器 */ private $_sensor; /* 警报器 */ private $_alarm; public function __construct() { $this->_camera1 = new Camera(); $this->_camera2 = new Camera(); $this->_light1 = new Light(); $this->_light2 = new Light(); $this->_light3 = new Light(); $this->_sensor = new Sensor(); $this->_alarm = new Alarm(); } public function activate() { $this->_camera1->turnOn(); $this->_camera2->turnOn(); $this->_light1->turnOn(); $this->_light2->turnOn(); $this->_light3->turnOn(); $this->_sensor->activate(); $this->_alarm->activate(); } public function deactivate() { $this->_camera1->turnOff(); $this->_camera2->turnOff(); $this->_light1->turnOff(); $this->_light2->turnOff(); $this->_light3->turnOff(); $this->_sensor->deactivate(); $this->_alarm->deactivate(); } } /** * 客户端 */ class Client { private static $_security; /** * Main program. */ public static function main() { self::$_security = new SecurityFacade(); self::$_security->activate(); } } Client::main(); ?>
위는 파사드 모드를 구현하기 위해 PHP를 사용하는 코드입니다. 또한 파사드 모드에 대한 몇 가지 개념적 차이가 있어 모든 분들의 학습에 도움이 되기를 바랍니다.