写点什么

结构型设计模式 - 外观 Facade

作者:菜皮日记
  • 2023-09-08
    北京
  • 本文字数:1037 字

    阅读完需:约 3 分钟

简介

外观模式特点是屏蔽后端复杂的实现逻辑,将其整合成简单的一个或几个接口提供出去,client 只需与 Facade 层提供的简单接口交互即可。

例如银行办业务,后面涉及到很多财务细节,但用户面对的就是一个窗口业务员。

角色

  • Facade 外观层

  • Subsystem 负责具体事务的子系统们

类图

类图

代码

class Facade{    protected $subsystem1;
    protected $subsystem2;
    public function __construct(        Subsystem1 $subsystem1 = null,        Subsystem2 $subsystem2 = null    ) {        $this->subsystem1 = $subsystem1 ?: new Subsystem1();        $this->subsystem2 = $subsystem2 ?: new Subsystem2();    }
    public function operation(): string    {        $result = "Facade initializes subsystems:\n";        $result .= $this->subsystem1->operation1();        $result .= $this->subsystem2->operation1();        $result .= "Facade orders subsystems to perform the action:\n";        $result .= $this->subsystem1->operationN();        $result .= $this->subsystem2->operationZ();
        return $result;    }}
class Subsystem1{    public function operation1(): string    {        return "Subsystem1: Ready!\n";    }
    public function operationN(): string    {        return "Subsystem1: Go!\n";    }}
class Subsystem2{    public function operation1(): string    {        return "Subsystem2: Get ready!\n";    }
    public function operationZ(): string    {        return "Subsystem2: Fire!\n";    }}
function clientCode(Facade $facade){    echo $facade->operation();}
$subsystem1 = new Subsystem1();$subsystem2 = new Subsystem2();$facade = new Facade($subsystem1, $subsystem2);clientCode($facade);
复制代码

output:

Facade initializes subsystems:Subsystem1: Ready!Subsystem2: Get ready!Facade orders subsystems to perform the action:Subsystem1: Go!Subsystem2: Fire!
复制代码


用户头像

菜皮日记

关注

全干程序员 2018-08-08 加入

还未添加个人简介

评论

发布
暂无评论
结构型设计模式-外观 Facade_设计模式_菜皮日记_InfoQ写作社区