ホームページ >バックエンド開発 >PHPチュートリアル >PHP のファサード パターンについて 1 つの記事で学習します

PHP のファサード パターンについて 1 つの記事で学習します

青灯夜游
青灯夜游転載
2021-07-22 18:46:243855ブラウズ

前の記事「 PHP のブリッジ モードについての簡単な話 」では、PHP のブリッジ モードについて紹介しましたが、次の記事では、PHP デザイン パターンのファサード モードについて説明します。

PHP のファサード パターンについて 1 つの記事で学習します

ファサード モードは外観モードとも呼ばれます。ファサードであれ外観であれ、それは私たちの顔と同じように、外の世界への媒体です。したがって、このモデルの最大の特徴は「見た目が良い」ということです。どのように言って?複雑なオブジェクト呼び出しがたくさんあると、特に古いシステムをアップグレードしたり保守したりするときに混乱します。ファサードを使用して、古いシステムの関数呼び出しをカプセル化します。外からは新しいシステムと同じように見えます。これがファサード パターンの目的です。

Gof クラス図と説明

GoF 定義: サブシステム内のインターフェイスのセットに一貫したインターフェイスを提供します。Facade パターンは高レベルのインターフェイスを定義します。インターフェース このサブシステムを使いやすくします。

#GoF クラス図

PHP のファサード パターンについて 1 つの記事で学習します

##コード実装

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 のサブシステムを定義します。これについては何も言うことはありません。多くのサブシステムがあることは想像できますが、それらは必ずしもこれら 4 つのサブシステムと同じであるとは限りません。大きく異なる場合もあります。

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 = new Facade();
$facade->MethodA();
$facade->MethodB();

クライアント呼び出しは非常に簡単です。具体的にどのサブシステムが呼び出されるかを知る必要はありません。ファサード上のこれらのメソッドが何を行うかを知る必要があるだけです。

ファサード モードは非常にシンプルなので、プロジェクトで開発を行った本当の友人である限り、知らず知らずのうちにこのモードを使用しているはずです。
  • ファサード パターンは、複雑なサブシステムに単純なインターフェイスを提供する必要がある場合に非常に適しています。同時に、クライアントプログラムと抽象クラスの実装部分との間に大きな依存関係がある場合、ファサードパターンを導入して切り離し、サブシステムの独立性と保守性を向上させることもできます。さらに、階層サブシステムを構築する必要がある場合、ファサードはサブシステムの各層のエントリ ポイントとして機能します。
  • フレームワークを使用したことがある人なら誰でも、Laravel でファサード システムを使用したことがあると思います。として: キャッシュ:: put()。 Laravel では、ファサードはマジック メソッド __callStatic() を使用して実装されます。次に、静的メソッドを使用してオブジェクトのメソッドを直接呼び出します。すごいと思いませんか?興味のある友人は、/Illuminate/Support/Facades/Facade.php にあるソース コードをチェックしてください。
  • キー ポイント: 3 層構造または MVC も、ファサード パターンの表現です。前述したように、ファサード モードは階層サブシステムのメンテナンスに適しています。 MVC、MVP、MVVM の 3 層構造は基本的にすべて階層化のためのものであり、階層化の目的はシステムの複雑さを軽減することです。
携帯電話を販売するだけでは不十分で、X Mi のようなハイテク家電企業になることが私たちの最終目標です。しかし、そんなに多くの家電製品を生産することはできません。そこで、モール (Facade) を作り、非常に質の高い加盟店を参加させ、彼らの製品 (SubSystem) をモール内に置いて一緒に販売することにしました。もちろん、これらの商品は私たちが厳選したものであり、間違いなく最高の中の最高です。 !

#完全なコード: https://github.com/zhangyue0503/designpatterns-php/blob/master/19.facade/source/facade.php

##例

今回は、送信ディメンションでテキスト メッセージの送信をパッケージ化し、さまざまなテキスト メッセージのインターフェイスとプッシュ演算子をパッケージ化します。送信するときは、送信のみを使用する必要があります。 class さまざまなサードパーティのサービスを使用して、テキスト メッセージやプッシュ通知の送信を制御できます。考えてみると非常に便利です。

SMS 送信クラス図

完全なソース コード: https://github.com/zhangyue0503/designpatterns- php /blob/master/19.facade/source/facade-push.phpPHP のファサード パターンについて 1 つの記事で学習します

<?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();

Description

これは今でもよく知られたレシピであり、馴染みのある味。ここで、サードパーティのサービス クラスはすべて古いインターフェイスであるか、すでに非常に複雑なインターフェイスであると想像できます。現時点では、外観パターンを使用すると、新しいシステムと連携して複雑さを軽減できます。

ただし、外観クラス自体が複雑さの原因になる可能性があることに注意してください。ただし、幸いなことに、単一の責任を遵守できます。原則として、1 つの外観クラスは 1 つのことを実行できます。
  • 元のアドレス: https://juejin.cn/post/6844903988085653518
著者: ハードコア プロジェクト マネージャー

推奨学習: 「

PHP ビデオ チュートリアル

以上がPHP のファサード パターンについて 1 つの記事で学習しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。