以下文字部分均为本人自己的想法与总结所以未必正确;
代码摘自https://blog.csdn.net/rust94/article/details/88895465
外观模式:
概念: 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。
角色:
Facade:外观角色
SubSystem:子系统角色
个人理解:
外观模式解耦了客户端和子系统,客户端通过访问门面调用子系统的方法。
比如,你要做饭需要买菜洗菜切菜炒菜装盘,如果不用外观模式则需要调用5个方法。现在安排一个厨师,他只有一个方法,那就是‘上菜’,你此时不需要关心菜如何做,只需要调用这个上菜的方法就行了,是不是方便很多?
网上找来的一张图片:
//子系统1
class SubSystemOne
{
public function methodOne()
{
echo "子系统方法1\n";
}
}
//子系统2
class SubSystemTwo
{
public function methodTwo()
{
echo "子系统方法2\n";
}
}
//子系统3
class SubSystemThree
{
public function methodThree()
{
echo "子系统方法3\n";
}
}
//子系统4
class SubSystemFourth
{
public function methodFourth()
{
echo "子系统方法4\n";
}
}
// 外观方法
class Facade
{
private $systemOne;
private $systemTwo;
private $systemThree;
private $systemFour;
function __construct()
{
$this->systemOne = new SubSystemOne();
$this->systemTwo = new SubSystemTwo();
$this->systemThree = new SubSystemThree();
$this->systemFour = new SubSystemFourth();
}
public function methodA()
{
echo "方法A() ---\n";
$this->systemOne->methodOne();
$this->systemThree->methodThree();
}
public function methodB()
{
echo "方法B() ---\n";
$this->systemTwo->methodTwo();
$this->systemFour->methodFourth();
}
}
//客户端代码
$facade = new Facade();
$facade->methodA();
$facade->methodB();