外观模式(Facade)属于结构型设计模式中的一种,又称之为门面模式。
门面模式隐藏了系统的复杂性,并为客户端提供了一个或多个可以访问系统的接口,
实现客户端与系统的解耦,降低复杂度。
门面模式定义了一个高层接口,这个接口使得子系统更加容易使用,用户只关心接口的使用,不必关心子系统是如何实现的,子系统的复杂关系由门面模式去解决。
门面模式就好比: 你问我Linux系统的启动过程是怎样的?我哪里知道啊,我只要按开机键,电脑就开启了。开机键就是电脑提供给用户使用的接口,用户不必关心电脑到底是如何启动的,而电脑本身去控制Bios硬件自检,引导加载,内核加载等操作。
举个板栗:
<?php
/**
* Created by PhpStorm.
* User: ClassmateLin
* Date: 2019/9/8
* Time: 8:52 下午
* Desc: 外观模式
*/
class Bios {
public function check()
{
echo '硬件自检' . PHP_EOL;
}
public function selectStarterDisc()
{
echo '选择启动盘' . PHP_EOL;
}
}
class Grub {
public function loader()
{
echo '加载引导' . PHP_EOL;
}
}
class Kernel {
public function loader()
{
echo '加载内核' . PHP_EOL;
}
}
class Init {
public function init()
{
echo 'os初始化' . PHP_EOL;
}
}
class RunLevel {
public function start()
{
echo '启动指定级别任务' . PHP_EOL;
}
}
class Computer {
private $bios;
private $grub;
private $kernel;
private $init;
private $runLevel;
public function __construct()
{
$this->bios = new Bios();
$this->grub = new Grub();
$this->kernel = new Kernel();
$this->init = new Init();
$this->runLevel = new RunLevel();
}
public function start()
{
$this->bios->check();
$this->bios->selectStarterDisc();
$this->grub->loader();
$this->init->init();
$this->runLevel->start();
}
public function program()
{
echo "echo 'hello world'";
}
}
$computer = new Computer();
$computer->start();
$computer->program();