今天说一个简单易懂的封装模式——门面模式。
<?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、门面不参与子系统内的业务逻辑
相关推荐
一个“好”的选型必将达成好的效果,选择一个“金玉其外”的解决方案则必然最终失败。
4. 作者通过卖柑者的话语,揭示了当时社会上许多人的虚伪,"金玉其外,败絮其中",批评了那些表面光鲜而内在腐朽的人,倡导表里如一的品质。 5. 题目5选项D中的"卖柑者"虽然以次充好,但他是被用来象征社会现象,而...
企业在决定部署ERP时,所有的一切在ERP系统选型时即已埋下伏笔,一个“好”的选型必将达成好的效果,选择一个“金玉其外”的解决方案则必然最终失败。那么,企业在选型时如何应对各鱼龙ERP厂商的狂轰滥炸呢?
5. 《卖柑者言》以柑橘为载体,运用寓言手法,通过对比柑橘的内外品质,映射出当时社会中“金玉其外,败絮其中”的现象,批评了统治阶层的腐败和无能。 6. 文中“法斁而不知理”指的是法律废弛而不去治理,反映了对...
文章开篇以“金玉其外,败絮其中”这句成语引出了刘基及其作品的批判性特点,提示读者这不仅是对个人品行的批评,更是对社会现象的深刻反思。而刘基之所以采用这种借物喻人的手法,可能是因为当时的言论环境相对闭塞...
8. 在实际应用中,可以用《卖柑者言》中的“金玉其外,败絮其中”来形容那些外表光鲜而内在质量低劣的事物或人,以此警示人们不应只看表面,而要深入了解事物的本质。同时,文中揭示的“欺”不仅限于当时的社会,...
例如题目中提到的词语错别字辨析(A选项中的“账薄”应为“账簿”),以及成语使用恰当与否(如A选项中的“金玉其外,败絮其中”),这些都是语文学习中的基本知识点。 2. **语文阅读理解**:文本阅读部分要求考生...
金玉其外使用 IDA 打开在 start 中发现 flag,删去.... 二十一、... 二十一、... 本文总结了 JUSTCTF 竞赛的所有题目,并对每个题目进行了详细的解析和分析,为 CTF 竞赛爱好者提供了有价值的参考资料。
2. **金玉其外,败絮其中**:某些酒店外观华丽,但内部功能规划混乱,实用性差且缺乏艺术性。设计师往往忽视酒店运营的实际需求,导致后期需要不断改造,增加了不必要的成本。不合理的客房设计和配套设施的欠缺,...
珍宝喻体如“金玉其外,败絮其中”,警示人们看事物不能只看表面。这些不同类型的喻体不仅体现了汉语的生动性,还展示了中国文化中的道德教化和哲理思考。 在第三章中,论文提出了基于第一语言习得的成语教学策略,...
金玉其外、败絮其中--评采乐搜狐版广告 爱情玫瑰让昨日重来--兰蔻网络游戏解析 说出电视说不得的,做到电视做不到的 点击率高达35.97%的“润妍”广告 炒做能出信誉吗?800Buy寻找“百万网友幸运星”活动解析之二 错误...
"退避三舍"来自春秋时期的晋楚争霸,"项庄舞剑意在沛公"发生在秦末汉初,"得陇望蜀"出自三国时期,"金玉其外败絮其中"则源自明朝。因此,正确顺序是"D 退避三舍、项庄舞剑意在沛公、得陇望蜀、金玉其外败絮其中"。 ...
但Logo不能只是金玉其外,还必须有思想、多功能。比如,可以用标准色在任何尺寸的纸张完美复制和再现。下面就晾出当前30个自认为很杰出的Logo,飨宴大家。一个打印机品牌,该Logo直截了当地体现了了企业的业务性质:...
5. 成语运用:第四题中考察了成语“差强人意”、“金玉其外,败絮其中”等的正确使用,让学生理解成语的含义并能在合适的情境中运用。 6. 语病分析:第五题检测了学生对语病的识别能力,如句子结构、逻辑连贯性等,...
41、金玉其外,败絮其中:外表华丽,内里破败不堪。常用来批评那些表面光鲜、实质空洞无物的事物或人。 42、江郎才尽:原指南朝江淹晚年文思减退,后泛指才思枯竭,创造力耗尽。提醒人们要不断学习,避免才华耗尽。...
* 职业生涯发展的重心:职业生涯发展需要自知和自制,不能金玉其外,败絮其中。 本资源提供了大学职业生涯人物访谈的PPT,旨在让学生了解职业生涯的重要性和相关知识点,可以作为大学生职业生涯发展的参考资料。
- **宋濂**:被誉为“开国文臣之首”,作品如《士录》和《卖柑者言》,后者提出了“金玉其外,败絮其中”的著名警句。 - **刘基**:与宋濂并称为明代文宗,作品《卖柑者言》是一篇讽刺小品。 - **凌濛初**:创作...