한 기사에서 PHP의 파사드 패턴에 대해 알아보세요.

青灯夜游
풀어 주다: 2023-04-10 11:46:01
앞으로
3833명이 탐색했습니다.

이전 기사 "PHP의 브리지 모드에 대한 간략한 이야기"에서 PHP의 브리지 모드를 소개했습니다. 이 기사에서는 PHP 디자인 패턴의 파사드 모드를 이해하도록 안내합니다.

한 기사에서 PHP의 파사드 패턴에 대해 알아보세요.

외관 모드, 모양 모드라고도 합니다. 외관이든 겉모습이든 그것은 우리의 얼굴과 마찬가지로 외부 세계를 알리는 매개체입니다. 따라서 이 모델의 가장 큰 특징은 '잘생겼다'는 점이다. 어떻게 말하나요? 특히 오래된 시스템을 업그레이드하고 유지 관리할 때 복잡한 개체 호출이 많아 혼란스럽습니다. 이전 시스템의 함수 호출을 캡슐화하기 위해 파사드를 사용하세요. 이것이 파사드 패턴의 목적입니다.

Gof 클래스 다이어그램 및 설명

GoF 정의: 하위 시스템의 인터페이스 집합에 대해 일관된 인터페이스를 제공합니다. Facade 패턴은 상위 수준 인터페이스를 정의하므로 이 하위 시스템을 더 쉽게 사용할 수 있습니다.

GoF 클래스 다이어그램

한 기사에서 PHP의 파사드 패턴에 대해 알아보세요.

코드 구현

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();
로그인 후 복사

클라이언트를 호출하는 것은 매우 간단합니다. 어떤 하위 시스템이 구체적으로 호출되는지 알 필요는 없습니다. 파사드에서 이러한 메서드가 수행하는 작업만 알면 됩니다.

  • 파사드 모드가 너무 간단하고, 프로젝트 개발을 해본 진짜 친구라면 이 모드도 모르고 사용했을 겁니다
  • 복잡한 서브시스템에 간단한 기능을 제공해야 할 때 인터페이스의 경우 파사드 패턴이 매우 적합합니다. 동시에 클라이언트 프로그램과 추상 클래스의 구현 부분 사이에 큰 종속성이 있는 경우 디커플링을 위해 파사드 패턴을 도입하여 하위 시스템의 독립성과 유지 관리성을 향상시킬 수도 있습니다. 또한 계층적 하위 시스템을 구축해야 할 때 Facade는 하위 시스템의 각 레이어에 대한 진입점 역할을 할 수 있습니다. 프레임워크를 사용해 본 사람이라면 누구나 다음과 같은 Laravel의 Facade 시스템을 사용해 본 적이 있을 것입니다. 놓다(). Laravel에서 파사드는 매직 메소드 __callStatic()을 사용하여 구현됩니다. 그런 다음 정적 메서드를 사용하여 개체의 메서드를 직접 호출할 수 있습니다. 놀랍지 않나요? 관심 있는 친구들은 /Illuminate/Support/Facades/Facade.php에 있는 소스 코드를 확인해 보세요.
  • 핵심 포인트: 3레이어 구조, 즉 MVC는 파사드 패턴의 표현이기도 합니다. 위에서 언급했듯이 Facade 모드는 계층적 하위 시스템을 유지 관리하는 데 적합합니다. 3티어 구조인 MVC, MVP, MVVM은 기본적으로 모두 레이어링을 위한 것이며, 레이어링의 목적은 시스템의 복잡성을 줄이는 것입니다.
휴대폰을 파는 것만으로는 충분하지 않습니다. X Mi와 같은 첨단 가전 회사가 되는 것이 우리의 궁극적인 목표입니다. 그러나 우리는 그렇게 많은 가전 제품을 생산할 수 없기 때문에 매우 우수한 상인들이 우리 진영에 합류할 수 있도록 쇼핑몰(Facade)을 짓고 그들의 제품(SubSystem)을 쇼핑몰에 넣어 함께 판매하기로 결정했습니다. 물론, 이 제품들은 우리가 엄선한 제품이며, 최고 중의 최고임이 분명합니다! !

전체 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade.php

Example

이번에는 문자 메시지를 보내드리겠습니다. 전송 차원이 패키징되어 있으며 다양한 SMS 및 푸시 연산자의 인터페이스가 패키징되어 있습니다. 전송 시 전송 클래스를 사용하여 SMS 전송을 제어하거나 다양한 타사 서비스를 사용하여 푸시하면 매우 편리합니다. 생각해보면 모직물!

SMS 전송 클래스 다이어그램

한 기사에서 PHP의 파사드 패턴에 대해 알아보세요.

전체 소스 코드: https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade-push.php

<?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 &#39;发送阿里云短信!&#39;, PHP_EOL;
    }
    public function Push()
    {
        echo &#39;推送阿里云通知!&#39;, PHP_EOL;
    }
}

class JiGuangService
{
    public function Send()
    {
        echo &#39;发送极光短信!&#39;, PHP_EOL;
    }
    public function Push()
    {
        echo &#39;推送极光通知!&#39;, PHP_EOL;
    }
}

$send = new Send();
$send->PushAndSendAliYun();
$send->PushAndSendJiGuang();
로그인 후 복사
Instructions

여전히 익숙한 레시피와 익숙한 맛. 여기서는 타사 서비스 클래스가 모두 오래된 인터페이스이거나 이미 매우 복잡한 인터페이스라고 상상할 수 있습니다. 이때 Appearance 패턴을 사용하면 새로운 시스템과 협력하여 복잡성을 줄일 수 있지만, Appearance 클래스 자체가 복잡성의 원인이 될 수 있다는 점에 유의해야 합니다. 외모 카테고리, 하나만 하세요
  • 원본 주소: https://juejin.cn/post/6844903988085653518
저자: Hardcore Project Manager

추천 학습: "

PHP Video Tutorial

"

위 내용은 한 기사에서 PHP의 파사드 패턴에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!