外观模式又叫门面模式;

现在都是模块化开发了;

开发中很多时候都是在使用各种扩展包;

或者在外观模式中我们叫做子系统;

外观模式的作用就是减少子系统之间的耦合;

降低子系统的使用难度;

我们举个栗子;

实现一个加密文件内容的功能;

这个功能分为两部分;用于从文本文件中读取内容的 File 类

用于加密内容的 Encrypt 类

如果我们每次都直接调用这两个类;

那耦合就有点高了;

这时候我们就加一层外观 Facade ;

在 Facade 中来完成文件读取和加密的过程;

在客户端调用的都是 Facade ;

结构

SubSystem: 子系统 示例中指 File 和 Encrypt ;

Facade: 外观对象;

示例

读取文件内容

File.php<?php

namespace Baijunyao\DesignPatterns\Facade;

/**

* 文件类

*

* @package Baijunyao\DesignPatterns\Facade

*/

class File

{

/**

* 获取文件内容

*/

public function content()

{

return '获取文件内容';

}

}

加密

Encrypt.php<?php

namespace Baijunyao\DesignPatterns\Facade;

/**

* 加密类

*

* @package Baijunyao\DesignPatterns\Facade

*/

class Encrypt

{

/**

* 加密

*/

public function encrypt()

{

return '加密';

}

}

外观对象

Facade<?php

namespace Baijunyao\DesignPatterns\Facade;

/**

* Facade

*

* @package Baijunyao\DesignPatterns\Facade

*/

class Facade

{

/**

* @var \Baijunyao\DesignPatterns\Facade\File

*/

private $file;

/**

* @var \Baijunyao\DesignPatterns\Facade\Encrypt

*/

private $encrypt;

/**

* Facade constructor.

*/

public function __construct()

{

$this->file = new File();

$this->encrypt = new Encrypt();

}

/**

* 获取文件内容并加密

*/

public function encryptContent()

{

echo $this->file->content();

echo '
';

echo $this->encrypt->encrypt();

}

}

运行;

index.php<?php

namespace Baijunyao\DesignPatterns\Facade;

require __DIR__.'/../vendor/autoload.php';

/**

* 客户端

*

* Class Client

* @package Baijunyao\DesignPatterns\Facade

*/

class Client

{

/**

* 运行

*/

public function run()

{

$facade = new Facade();

$facade->encryptContent();

}

}

$client = new Client();

$client->run();

从代码可以看出;

外观模式对客户端屏蔽了子系统;

但是也有缺点;

如果想增加子系统;

就需要修改 Facade ;

这就违反了开闭原则 ;

设计模式之外观模式php,php设计模式(十五)外观模式相关推荐

  1. C#设计模式之十五迭代器模式(Iterator Pattern)【行为型】

    一.引言 今天我们开始讲"行为型"设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看."迭代器模式& ...

  2. 从王者荣耀看设计模式(十五.建造者模式)

    从王者荣耀看设计模式(建造者模式) 一.简介 为了玩王者荣耀的游戏体验感,不少玩家都会选择花钱购买自己常用英雄的皮肤.一方面,购买的皮肤通常要比原画更加"炫酷".另一方面,购买的英 ...

  3. 【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门

    上一篇文章学习了中断与异常的概念:[OS学习笔记]三十四 保护模式十:中断和异常区别 本片文章接着学习以下内容: 中断描述符表 中断门 陷阱门 1 中断描述符表 我们前面讲了无数次,在实模式下,是由位 ...

  4. 【OS学习笔记】二十五 保护模式七:任务和特权级保护对应的汇编源代码

    本汇编代码是以下两篇文章讲解的内容的内核代码; [OS学习笔记]二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念 [OS学习笔记]二十四 保护模式七:调用门与依从的代码段----特权级保护 ...

  5. 【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制

    上一篇文章学习了段描述符与段描述符各个标志位的含义:段描述符 本篇文章学习如何进入保护模式,并学习如何在保护模式下进行内存访问. 1.如何进入保护模式 假设我们已经用汇编语言将段描述符安装到GDT中( ...

  6. 大话设计模式之爱你一万年:第十五章 行为模式:状态模式:为烧烤造个电梯:1. 状态模式基本概念

    我和女朋友的这个烧烤店越做越大,已经容不下更多的人.于是我们就买了块地,然后建了一栋楼,楼房已经创建了差不多了.现在还差这个电梯系统还没搞定.搞电梯的人需要三个月才能搞定. 天才的我,最讨厌等待了,于 ...

  7. 设计模式学习笔记十五——Command模式

    动机:将一组行为抽象为对象,实现行为请求者和行为实现者之间的解耦,并且支持对行为进行记录.撤销.重做.事务等处理. 场景:考虑一系列文档操作:打开.复制.剪切.粘帖. 结构 代码实现 /**//*   ...

  8. 大话设计模式之爱你一万年:第十五章 行为模式:状态模式:为烧烤造个电梯:2.状态模式之电梯系统

    接下来我们通过这个电梯系统来学习一下状态模式. 一.电梯系统分析 电梯的状态有停止.运行.开门和关门等状态.而且每个状态还都要有特定的行为,比如在开门的状态下,电梯只能关门,而不能运行:在关门状态下, ...

  9. 大话设计模式之爱你一万年:第十八章 行为模式:中介者模式:那些年的情书-邮局传情:2.中介者模式之邮局传情

    我:时隔多年,当年往事历历在目,邮局在那个年代千里传递了我对你的爱. 女朋友:是呀,那时候我就觉得你特别有文采. 我:其实我语文学的真的不是很好. 女朋友:那你还能写出这么有诗情画意的句子. 我:我想 ...

最新文章

  1. 阿里云微服务引擎 MSE 2022 年 3 月产品动态
  2. 【NLP实战】Task2:特征处理
  3. Oracle数据库DECODE函数的使用.
  4. 更改Web.config中对上传文件大小限制
  5. 【BZOJ1923】外星千足虫,高斯消元解xor方程组
  6. 智能+大数据 在云+互联时代下创造的精准营销
  7. Repeater使用:绑定时 结合 前台JS及后台共享方法
  8. 虚拟机安装Ubuntu无法通过Xshell登录
  9. pytorch中调整学习率: torch.optim.lr_scheduler
  10. Linux系统设置VIP(虚拟IP)的两种方式
  11. 博士德服务器帐套维护密码忘记,T+账套主管的密码忘记了,怎么办
  12. 抽象代数 Abstract Algebra 学习笔记
  13. 清华天才王垠和阿里 P10 面试官赵海平神仙打架后,我们来说说技术面试中的该与不该!...
  14. excel取消隐藏_Excel教程:教你两招,批量取消隐藏工作表
  15. java自行车怎么调档_变速的自行车如何调档
  16. Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'解决方案
  17. Hash表_拉链法_开放寻址法_模拟散列表
  18. NameError: name ‘_name_‘ is not define!解决方法
  19. 苹果摊上事了,iPhone 13新机大翻车,坑害无数人
  20. pikachu靶场SQL,sqlmap解法

热门文章

  1. 比Keras更好用的机器学习“模型包”:无需预处理,0代码上手做模型
  2. 月薪50K的机器学习工程师,需要具备哪些条件?
  3. 11个让你吃惊的Linux终端命令
  4. 漫画:5分钟弄懂分治算法!它和递归算法的关系!
  5. 用数据分析蔡徐坤1亿转发量幕后推手被封后能否动摇饭圈文化?
  6. 用python分析了30万条微博评论,毕业生与翟天临的爱恨情仇
  7. 你熟悉Git常用的命令吗?(点赞+收藏)
  8. Django源码分析4:staticfiles静态文件处理中间件分析
  9. 基于交换技术的网络中,全双工主要运行在?( 内有答案与详解)
  10. 图像分割在医学影像学中的应用(一)