企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### 外观模式 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。 举一个简单的例子,相信大家都使用过 C++ 语言,他是一门编译型语言,写完代码之后,我们需要经过编译之后才能运行,在IDE中,会有一个 Build 的按钮,点击它即可完成编译过程,但是这一个简单的动作背后,却是一系列复杂操作的协调配合,至少包括词法分析,语法分析,生成中间代码,生成汇编代码以及链接等操作,作为普通开发人员,我们不必在意这些过程是如何完成的,只需要点击Build按钮,IDE就会自动帮我们完成背后的工作。那么这个Build按钮就是IDE为我们提供的高级接口,通过他来完成各种子系统的协调工作。 `角色:` Facade:外观角色,提供高级接口 SubSystem:子系统角色,负责各自的功能实现 `UML 类图` ![此处输入图片的描述](https://doc.shiyanlou.com/document-uid108299labid2297timestamp1486374473372.png) `示例代码`:`Facade.class.php` ~~~php <?php class SystemA { public function operationA() { echo "operationA <br>"; } } class SystemB { public function operationB() { echo "operationB <br>"; } } class SystemC { public function operationC() { echo "operationC <br>"; } } class Facade { protected $systemA; protected $systemB; protected $systemC; function __construct() { $this->systemA = new SystemA(); $this->systemB = new SystemB(); $this->systemC = new SystemC(); } public function myOperation() { $this->systemA->operationA(); $this->systemB->operationB(); $this->systemC->operationC(); } } $facade = new Facade(); $facade->myOperation(); ~~~ 使用外观模式最大的优点就是子系统与客户端之间是松耦合的关系,客户端不必知道具体有哪些子系统,也无需知道他们是如何工作的,通过引入一个外观类,提供一个客户端间接访问子系统的高级接口。子系统和外观类可以独立运作,修改某一个子系统的内容,不会影响到其他子系统,也不会影响到外观对象。不过它的缺点就是它不够灵活,当需要增加一个子系统的时候,需要修改外观类。