【原创】PHP 设计模式之门面模式

什么是门面模式

门面模式又称为外观模式,门面模式的作用是为多个子类提供一个统一的高级口,隐藏系统的复杂度,可以提高系统的灵活性和安全性,不会暴露系统的复杂性。
客户端进行访问的时候不需要在意子类的复杂度和实现过程,只需要访问系统提供的统一入口就可以实现依赖的子类的所有功能。

测试实例

TestOneController.php

<?php

namespace App\Http\Controllers\Facade;

use App\Http\Controllers\Controller;

class TestOneController extends Controller
{
    public function methodOne()
    {
        echo 'This is method one.';
    }
}

TestTwoController.php

<?php

namespace App\Http\Controllers\Facade;

use App\Http\Controllers\Controller;

class TestTwoController extends Controller
{
    public function methodTwo()
    {
        echo 'This is method two.';
    }
}

TestThreeController.php

<?php

namespace App\Http\Controllers\Facade;

use App\Http\Controllers\Controller;

class TestThreeController extends Controller
{
    public function methodThree()
    {
        echo 'This is method three.';
    }
}

TestFourController.php

<?php

namespace App\Http\Controllers\Facade;

use App\Http\Controllers\Controller;

class TestFourController extends Controller
{
    public function methodFour()
    {
        echo 'This is method four.';
    }
}

Facade.php

<?php

namespace App\Http\Controllers\Facade;

class Facade
{
    private TestOneController $testOne;
    private TestTwoController $testTwo;
    private TestThreeController $testThree;
    private TestFourController $testFour;

    public function __construct()
    {
        $this->testOne = new TestOneController();
        $this->testTwo = new TestTwoController();
        $this->testThree = new TestThreeController();
        $this->testFour = new TestFourController();
    }

    public function methodOne()
    {
        $this->testOne->methodOne();
        $this->testTwo->methodTwo();
    }

    public function methodTwo()
    {
        $this->testThree->methodThree();
        $this->testFour->methodFour();
    }
}

Client.php

<?php
namespace App\Http\Controllers\Facade;

use App\Http\Controllers\Controller;

class Client extends Controller
{
    public function run()
    {
        $facade = new Facade();
        $facade->methodOne();
        echo "<br/>";
        $facade->methodTwo();
    }
}

从代码上看,如果没有门面类,客户端只能直接与子系统进行交互,子系统如果变化,很可能将会影响到客户端的调用。而子系统在不断优化重构中,可能会产生更多更小的类。这对于客户端来说似乎要记住太多的接口。使用门面模式增加门面类后,减少了客户端与子系统之间的耦合,也提高了可维护性。

应用场景

首先,在设计初期阶段,应该要有意识的将不同的两个层分离,层与层之间建立外观Facade;其次,在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖;另外在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

参考链接:https://www.yangpanyao.com/archives/250.html

点赞
  1. LuckyBandit说道:
    Google Chrome Windows 10
    https://t.me/officials_pokerdom/3357
  2. RoyalFlusher说道:
    Google Chrome Windows 10
    https://t.me/s/ezcash_officials
  3. HighRollerMage说道:
    Google Chrome Windows 10
    http://images.google.ki/url?q=https://t.me/officials_7k/1049
  4. RoyalFlusher说道:
    Google Chrome Windows 10
    В лабиринте игр, где каждый сайт пытается привлечь гарантиями простых выигрышей, рейтинг казино на рубли является как раз той путеводителем, что ведет через заросли подвохов. Для хайроллеров да новичков, кто устал от фальшивых обещаний, он средство, дабы увидеть подлинную выплату, будто вес ценной монеты в ладони. Без лишней ерунды, лишь надёжные площадки, в которых выигрыш не лишь число, но реальная удача.Составлено из гугловых трендов, как паутина, которая вылавливает наиболее актуальные веяния на сети. Здесь отсутствует пространства про шаблонных приёмов, любой пункт как ход на столе, где подвох выявляется сразу. Профи видят: на России манера письма и подтекстом, где юмор притворяется как намёк, позволяет миновать обмана.На https://don8play.gitbook.io/don8play-docs/untitled этот рейтинг находится как открытая карта, готовый для раздаче. Зайди, когда желаешь почувствовать пульс подлинной азарта, без обмана да разочарований. Игрокам кто знает тактильность удачи, это будто иметь карты у ладонях, минуя пялиться по монитор.

发表回复

电子邮件地址不会被公开。必填项已用 * 标注