慕容的工作随笔

慕容的工作随笔

记录学习和工作

【原创】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-&gt;testOne = new TestOneController();
    $this-&gt;testTwo = new TestTwoController();
    $this-&gt;testThree = new TestThreeController();
    $this-&gt;testFour = new TestFourController();
}

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

public function methodTwo()
{
    $this-&gt;testThree-&gt;methodThree();
    $this-&gt;testFour-&gt;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

评论 (0)

还没有评论,来做第一个吧。

发表评论

提交后需管理员审核通过后显示