什么是门面模式
门面模式又称为外观模式,门面模式的作用是为多个子类提供一个统一的高级口,隐藏系统的复杂度,可以提高系统的灵活性和安全性,不会暴露系统的复杂性。
客户端进行访问的时候不需要在意子类的复杂度和实现过程,只需要访问系统提供的统一入口就可以实现依赖的子类的所有功能。
测试实例
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
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。