设计模式之外观模式php,php设计模式(十五)外观模式
外观模式又叫门面模式;
现在都是模块化开发了;
开发中很多时候都是在使用各种扩展包;
或者在外观模式中我们叫做子系统;
外观模式的作用就是减少子系统之间的耦合;
降低子系统的使用难度;
我们举个栗子;
实现一个加密文件内容的功能;
这个功能分为两部分;用于从文本文件中读取内容的 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设计模式(十五)外观模式相关推荐
- C#设计模式之十五迭代器模式(Iterator Pattern)【行为型】
一.引言 今天我们开始讲"行为型"设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看."迭代器模式& ...
- 从王者荣耀看设计模式(十五.建造者模式)
从王者荣耀看设计模式(建造者模式) 一.简介 为了玩王者荣耀的游戏体验感,不少玩家都会选择花钱购买自己常用英雄的皮肤.一方面,购买的皮肤通常要比原画更加"炫酷".另一方面,购买的英 ...
- 【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门
上一篇文章学习了中断与异常的概念:[OS学习笔记]三十四 保护模式十:中断和异常区别 本片文章接着学习以下内容: 中断描述符表 中断门 陷阱门 1 中断描述符表 我们前面讲了无数次,在实模式下,是由位 ...
- 【OS学习笔记】二十五 保护模式七:任务和特权级保护对应的汇编源代码
本汇编代码是以下两篇文章讲解的内容的内核代码; [OS学习笔记]二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念 [OS学习笔记]二十四 保护模式七:调用门与依从的代码段----特权级保护 ...
- 【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制
上一篇文章学习了段描述符与段描述符各个标志位的含义:段描述符 本篇文章学习如何进入保护模式,并学习如何在保护模式下进行内存访问. 1.如何进入保护模式 假设我们已经用汇编语言将段描述符安装到GDT中( ...
- 大话设计模式之爱你一万年:第十五章 行为模式:状态模式:为烧烤造个电梯:1. 状态模式基本概念
我和女朋友的这个烧烤店越做越大,已经容不下更多的人.于是我们就买了块地,然后建了一栋楼,楼房已经创建了差不多了.现在还差这个电梯系统还没搞定.搞电梯的人需要三个月才能搞定. 天才的我,最讨厌等待了,于 ...
- 设计模式学习笔记十五——Command模式
动机:将一组行为抽象为对象,实现行为请求者和行为实现者之间的解耦,并且支持对行为进行记录.撤销.重做.事务等处理. 场景:考虑一系列文档操作:打开.复制.剪切.粘帖. 结构 代码实现 /**//* ...
- 大话设计模式之爱你一万年:第十五章 行为模式:状态模式:为烧烤造个电梯:2.状态模式之电梯系统
接下来我们通过这个电梯系统来学习一下状态模式. 一.电梯系统分析 电梯的状态有停止.运行.开门和关门等状态.而且每个状态还都要有特定的行为,比如在开门的状态下,电梯只能关门,而不能运行:在关门状态下, ...
- 大话设计模式之爱你一万年:第十八章 行为模式:中介者模式:那些年的情书-邮局传情:2.中介者模式之邮局传情
我:时隔多年,当年往事历历在目,邮局在那个年代千里传递了我对你的爱. 女朋友:是呀,那时候我就觉得你特别有文采. 我:其实我语文学的真的不是很好. 女朋友:那你还能写出这么有诗情画意的句子. 我:我想 ...
最新文章
- 阿里云微服务引擎 MSE 2022 年 3 月产品动态
- 【NLP实战】Task2:特征处理
- Oracle数据库DECODE函数的使用.
- 更改Web.config中对上传文件大小限制
- 【BZOJ1923】外星千足虫,高斯消元解xor方程组
- 智能+大数据 在云+互联时代下创造的精准营销
- Repeater使用:绑定时 结合 前台JS及后台共享方法
- 虚拟机安装Ubuntu无法通过Xshell登录
- pytorch中调整学习率: torch.optim.lr_scheduler
- Linux系统设置VIP(虚拟IP)的两种方式
- 博士德服务器帐套维护密码忘记,T+账套主管的密码忘记了,怎么办
- 抽象代数 Abstract Algebra 学习笔记
- 清华天才王垠和阿里 P10 面试官赵海平神仙打架后,我们来说说技术面试中的该与不该!...
- excel取消隐藏_Excel教程:教你两招,批量取消隐藏工作表
- java自行车怎么调档_变速的自行车如何调档
- Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'解决方案
- Hash表_拉链法_开放寻址法_模拟散列表
- NameError: name ‘_name_‘ is not define!解决方法
- 苹果摊上事了,iPhone 13新机大翻车,坑害无数人
- pikachu靶场SQL,sqlmap解法
热门文章
- 比Keras更好用的机器学习“模型包”:无需预处理,0代码上手做模型
- 月薪50K的机器学习工程师,需要具备哪些条件?
- 11个让你吃惊的Linux终端命令
- 漫画:5分钟弄懂分治算法!它和递归算法的关系!
- 用数据分析蔡徐坤1亿转发量幕后推手被封后能否动摇饭圈文化?
- 用python分析了30万条微博评论,毕业生与翟天临的爱恨情仇
- 你熟悉Git常用的命令吗?(点赞+收藏)
- Django源码分析4:staticfiles静态文件处理中间件分析
- 基于交换技术的网络中,全双工主要运行在?( 内有答案与详解)
- 图像分割在医学影像学中的应用(一)