이전 기사 "PHP의 브리지 모드에 대한 간략한 이야기"에서 PHP의 브리지 모드를 소개했습니다. 이 기사에서는 PHP 디자인 패턴의 파사드 모드를 이해하도록 안내합니다.
외관 모드, 모양 모드라고도 합니다. 외관이든 겉모습이든 그것은 우리의 얼굴과 마찬가지로 외부 세계를 알리는 매개체입니다. 따라서 이 모델의 가장 큰 특징은 '잘생겼다'는 점이다. 어떻게 말하나요? 특히 오래된 시스템을 업그레이드하고 유지 관리할 때 복잡한 개체 호출이 많아 혼란스럽습니다. 이전 시스템의 함수 호출을 캡슐화하기 위해 파사드를 사용하세요. 이것이 파사드 패턴의 목적입니다.
GoF 정의: 하위 시스템의 인터페이스 집합에 대해 일관된 인터페이스를 제공합니다. Facade 패턴은 상위 수준 인터페이스를 정의하므로 이 하위 시스템을 더 쉽게 사용할 수 있습니다.
GoF 클래스 다이어그램
코드 구현
class SubSystemOne { public function MethodOne() { echo '子系统方法一', PHP_EOL; } } class SubSystemTwo { public function MethodTwo() { echo '子系统方法二', PHP_EOL; } } class SubSystemThree { public function MethodThree() { echo '子系统方法三', PHP_EOL; } } class SubSystemFour { public function MethodFour() { echo '子系统方法四', PHP_EOL; } }
4개 또는 N개 이상의 하위 시스템을 정의합니다. 이에 대해 말할 것도 없습니다. 이 네 가지 하위 시스템은 유사하지만 크게 다를 수 있습니다.
class Facade { private $subStytemOne; private $subStytemTwo; private $subStytemThree; private $subStytemFour; public function __construct() { $this->subSystemOne = new SubSystemOne(); $this->subSystemTwo = new SubSystemTwo(); $this->subSystemThree = new SubSystemThree(); $this->subSystemFour = new SubSystemFour(); } public function MethodA() { $this->subSystemOne->MethodOne(); $this->subSystemTwo->MethodTwo(); } public function MethodB() { $this->subSystemOne->MethodOne(); $this->subSystemTwo->MethodTwo(); $this->subSystemThree->MethodThree(); $this->subSystemFour->MethodFour(); } }
이러한 서브시스템은 Facade 클래스를 통해 패키징되며, 새로 정의된 Facade 메소드만 외부에 제공됩니다.
$facade = new Facade(); $facade->MethodA(); $facade->MethodB();
클라이언트를 호출하는 것은 매우 간단합니다. 어떤 하위 시스템이 구체적으로 호출되는지 알 필요는 없습니다. 파사드에서 이러한 메서드가 수행하는 작업만 알면 됩니다.
전체 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade.php
Example
전체 소스 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade-push.php
Instructions<?php class Send { private $aliYunService; private $jiGuangService; private $message; private $push; public function __construct() { $this->aliYunService = new AliYunService(); $this->jiGuangService = new JiGuangService(); $this->message = new MessageInfo(); $this->push = new PushInfo(); } public function PushAndSendAliYun() { $this->message->Send($this->aliYunService); $this->push->Push($this->aliYunService); } public function PushAndSendJiGuang() { $this->message->Send($this->jiGuangService); $this->push->Push($this->jiGuangService); } } class MessageInfo { public function Send($service) { $service->Send(); } } class PushInfo { public function Push($service) { $service->Push(); } } class AliYunService { public function Send() { echo '发送阿里云短信!', PHP_EOL; } public function Push() { echo '推送阿里云通知!', PHP_EOL; } } class JiGuangService { public function Send() { echo '发送极光短信!', PHP_EOL; } public function Push() { echo '推送极光通知!', PHP_EOL; } } $send = new Send(); $send->PushAndSendAliYun(); $send->PushAndSendJiGuang();로그인 후 복사여전히 익숙한 레시피와 익숙한 맛. 여기서는 타사 서비스 클래스가 모두 오래된 인터페이스이거나 이미 매우 복잡한 인터페이스라고 상상할 수 있습니다. 이때 Appearance 패턴을 사용하면 새로운 시스템과 협력하여 복잡성을 줄일 수 있지만, Appearance 클래스 자체가 복잡성의 원인이 될 수 있다는 점에 유의해야 합니다. 외모 카테고리, 하나만 하세요
저자: Hardcore Project Manager
- 원본 주소: https://juejin.cn/post/6844903988085653518
추천 학습: "PHP Video Tutorial
"위 내용은 한 기사에서 PHP의 파사드 패턴에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!