十、门面模式
10.1 什么是门面模式
要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用
10.2 怎么实现门面模式
Facade 门面角色:客户端可以调用这个角色的方法。此角色知晓子系统的所有功能和责任
subsystem 子系统角色:可以同时有一个或者多个子系统。每一个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存在
<?php
class Auth
{
public function auth()
{
echo self::class,PHP_EOL;
}
}
class JWTAuth
{
public function auth()
{
echo self::class,PHP_EOL;
}
}
class Facade
{
private Auth $auth;
private JWTAuth $jwtAuth;
public function __construct()
{
$this->auth = new Auth();
$this->jwtAuth = new JWTAuth();
}
public function auth()
{
$this->auth->auth();
}
public function jwtAuth()
{
$this->jwtAuth->auth();
}
}
$facade = new Facade();
$facade->auth();
$facade->jwtAuth();
10.3 门面模式优点是什么
-
减少系统的相互依赖:所有的依赖都是对门面对象的依赖,与子系统无关
-
提高了灵活性:不管子系统内部如何变化,只要不影响到门面对象,任你自由活动
-
提高安全性:想让你访问子系统的哪些业务就开通哪些逻辑,不在门面上开通的方法,你休想访问到
10.4 门面模式缺点是什么
门面模式最大的缺点就是不符合开闭原则,对修改关闭,对扩展开放
10.5 门面模式的使用场景
-
子系统相对独立——外界对子系统的访问只要黑箱操作即可
-
预防低水平人员带来的风险扩散
10.6 门面模式的注意事项
-
一个子系统可以有多个门面:门面已经庞大到不能忍受的程度、子系统可以提供不同访问路径
-
门面不参与子系统内的业务逻辑:门面角色应该是稳定,它不应该经常变化,它是一个系统对外的接口