今天说一个简单易懂的封装模式——门面模式。
<?php interface ILetterProcess{ public function writeContent( $content ); public function fileEnvelope( $address ); public function letterIntoEnvelope(); public function sendLetter(); } class LetterProcessImp implements ILetterProcess{ public function writeContent( $content ) { echo "填写内容:".$content."\n"; } public function fileEnvelope( $address ) { echo "填写收件人地址:".$address."\n"; } public function letterIntoEnvelope() { echo "把信放入信封中\n"; } public function sendLetter() { echo "邮递信件\n"; } } class Safe{ public function checkLetter(ILetterProcess $letterProcess){ echo "信件检查通过"; } }
这有两个类,一个是邮件发送类,一个安全类,现不采用门面模式来发送一个邮件。
$letterProcessImp = new LetterProcessImp(); $safe = new Safe(); $letterProcessImp->writeContent('XXXXX'); $letterProcessImp->fileEnvelope('XXXXX@XX.com'); $safe->checkLetter($letterProcessImp); $letterProcessImp->letterIntoEnvelope(); $letterProcessImp->sendLetter(); 运行结果: 填写内容:XXXXX 填写收件人地址:XXXXX@XX.com 信件检查通过 把信放入信封中 邮递信件 [Finished in 0.2s]
看看这个过程,它与高内聚的要求相差甚远,更不要说迪米特法则、接口隔离原则了。你要知道这几个步骤,并还要知道它们的顺序,一旦出错,信就不可能邮寄出去,这在面向对象的编程中是极度不适合,它根本就没有完成一个类所具有的单一职责。如果有很多信件,那得累死。现在来优化这个过程,利用门面模式来封装,类图如下:
如图所示,增加了一个ModenPostOffice类:
class ModenPostOffice{ private $letterProcess; private $safe; public function __construct(){ $this->letterProcess = new LetterProcessImp(); $this->safe = new Safe(); } public function sendLetter($content,$address){ $this->letterProcess->writeContent($content); $this->letterProcess->fileEnvelope($address); $this->safe->checkLetter($this->letterProcess); $this->letterProcess->letterIntoEnvelope(); $this->letterProcess->sendLetter(); } } $modenPostOffice = new ModenPostOffice(); $modenPostOffice->sendLetter('XXXXX','XXXXX@XX.com'); 运行结果: 填写内容:XXXXX 填写收件人地址:XXXXX@XX.com 信件检查通过 把信放入信封中 邮递信件 [Finished in 0.2s]同上
简化了很多,只要与ModenPostOffice交互就成了,其他什么都不用管。
门面模式的定义
也叫外观模式,是一种比较常用的封装模式。其定义为:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。更简单地说,门面对象是外界访问子系统内部的唯一通道,不管子系统内部是多么杂乱无章,只要有门面对象在,就可以做到“金玉其外,败絮其中”。门面模式由两种角色组成:
1、Facade门面角色
客户端可以调用这个角色的方法。此角色知晓子系统的所有功能和责任。一般情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去,也就说该角色没有实际的业务逻辑,只是一个委托类。
2、subsystem子系统角色
可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合。子系统并不知道门面的存在。对于子系统而言,门面仅仅是另外一个客户端而已。
门面模式的优点
1、减少系统的相互依赖
如果不使用门面模式,外界访问直接深入子系统内部,相互之间是一种强耦合关系,这样的强依赖是系统设计所不能接受的,门面模式很好地解决了这个问题,所有依赖都是对门面对象的依赖,与子系统无关。
2、提高了灵活性
依赖减少了,灵活性自然提高了。不管子系统内部如何变化,只要不影响到门面对象,任由你自由活动。
3、提高安全性
想让你访问子系统的哪些业务就开通哪些逻辑,不在门面上开通的方法,你休想访问到。
门面模式的缺点
门面模式最大缺点就是符合开闭原则,对修改关闭,对扩展开放,门面对象是重中之重,一旦在系统上线后发现错误,唯一能做的就是修改门面角色的代码。
门面模式的使用场景
1、为一个复杂的模块或子系统提供一个供外界访问的接口
2、子系统相对独立——外界对子系统的访问只要黑箱操作即可
3、预防低水平人员带来的风险扩散
门面模式的注意事项
1、一个子系统可以有多个门面
(1)门面已经庞大到不能忍受的程度
(2)子系统可以提供不同访问路径
2、门面不参与子系统内的业务逻辑
相关推荐
一个“好”的选型必将达成好的效果,选择一个“金玉其外”的解决方案则必然最终失败。
"金玉其外,败絮其中"这句成语源自此篇,用来形容表面光鲜而内在空虚或品质败坏的情况。文章以一位买柑者的角度展开,通过对柑橘外表光鲜而内里腐烂的描述,引发对社会欺诈行为的深入探讨。 在学习过程中,我们需要...
这篇文章通过卖柑者的话,讽刺了当时社会的腐败现象,揭示了"金玉其外,败絮其中"的现象。 - 句子翻译:"又何往而不金玉其外、败絮其中也哉!" 意思是:到哪里不是外表华丽而内在破败呢? - 文章理解:选项D理解...
4. 作者通过卖柑者的话语,揭示了当时社会上许多人的虚伪,"金玉其外,败絮其中",批评了那些表面光鲜而内在腐朽的人,倡导表里如一的品质。 5. 题目5选项D中的"卖柑者"虽然以次充好,但他是被用来象征社会现象,而...
企业在决定部署ERP时,所有的一切在ERP系统选型时即已埋下伏笔,一个“好”的选型必将达成好的效果,选择一个“金玉其外”的解决方案则必然最终失败。那么,企业在选型时如何应对各鱼龙ERP厂商的狂轰滥炸呢?
5. 《卖柑者言》以柑橘为载体,运用寓言手法,通过对比柑橘的内外品质,映射出当时社会中“金玉其外,败絮其中”的现象,批评了统治阶层的腐败和无能。 6. 文中“法斁而不知理”指的是法律废弛而不去治理,反映了对...
8. 在实际应用中,可以用《卖柑者言》中的“金玉其外,败絮其中”来形容那些外表光鲜而内在质量低劣的事物或人,以此警示人们不应只看表面,而要深入了解事物的本质。同时,文中揭示的“欺”不仅限于当时的社会,...
例如题目中提到的词语错别字辨析(A选项中的“账薄”应为“账簿”),以及成语使用恰当与否(如A选项中的“金玉其外,败絮其中”),这些都是语文学习中的基本知识点。 2. **语文阅读理解**:文本阅读部分要求考生...
金玉其外使用 IDA 打开在 start 中发现 flag,删去.... 二十一、... 二十一、... 本文总结了 JUSTCTF 竞赛的所有题目,并对每个题目进行了详细的解析和分析,为 CTF 竞赛爱好者提供了有价值的参考资料。
2. **金玉其外,败絮其中**:某些酒店外观华丽,但内部功能规划混乱,实用性差且缺乏艺术性。设计师往往忽视酒店运营的实际需求,导致后期需要不断改造,增加了不必要的成本。不合理的客房设计和配套设施的欠缺,...
珍宝喻体如“金玉其外,败絮其中”,警示人们看事物不能只看表面。这些不同类型的喻体不仅体现了汉语的生动性,还展示了中国文化中的道德教化和哲理思考。 在第三章中,论文提出了基于第一语言习得的成语教学策略,...
文章通过卖柑者与作者的对话,揭示了社会上表里不一的现象,用“金玉其外,败絮其中”比喻那些看似威严实则无能的官员,反映了作者对当时社会的批判态度。题目要求翻译句子并选择理解正确的选项,旨在让学生理解文章...
金玉其外、败絮其中--评采乐搜狐版广告 爱情玫瑰让昨日重来--兰蔻网络游戏解析 说出电视说不得的,做到电视做不到的 点击率高达35.97%的“润妍”广告 炒做能出信誉吗?800Buy寻找“百万网友幸运星”活动解析之二 错误...
7. 文学作品:《卖柑者言》的作者是刘基,包含“金玉其外,败絮其中”的名句。 8. 义务教育:适龄儿童、少年的入学、休学需由乡镇人民政府或县级人民政府教育行政部门批准。 9. 中国古代艺术:被称为我国最大古典...
"退避三舍"来自春秋时期的晋楚争霸,"项庄舞剑意在沛公"发生在秦末汉初,"得陇望蜀"出自三国时期,"金玉其外败絮其中"则源自明朝。因此,正确顺序是"D 退避三舍、项庄舞剑意在沛公、得陇望蜀、金玉其外败絮其中"。 ...
5. 成语运用:检查学生对成语的理解和使用,如“金玉其外,败絮其中”,要求学生理解成语含义并正确使用。 6. 文学名著阅读:涉及《西游记》、《钢铁是怎样炼成的》、《水浒传》、《格列佛游记》、《鲁滨逊漂流记》...
3. 成语应用,文中“金玉其外,败絮其中”用来形容表面光鲜而内在败坏的人或事物。 4. 古文词汇解释,如“吾业是有年矣”中的“是”作代词,“醉醇酉农而饫肥鲜者”中的形容词作名词等。 5. 翻译练习,如“吾子未之...
- “金玉其外,败絮其中”出自刘基的《卖柑者言》,表达了外在与内在的对比。 8. 义务教育法规: - 适龄儿童因身体原因需延缓入学或休学,需由乡镇或县级教育行政部门批准,体现了国家对义务教育的管理和保障。 ...