学 习模式的人对门面模式都不会太陌生,如果说工厂模式是对对象的高层次抽象的话,那么门面模式就是对对象,就是一种更高层次的抽象。这么说可能不好理解,我 们举个很好理解的例子,我们知道cpu的目的是为了运算,而运算我们又分成解释和计算。这分别是由解释器对象和运算器对象完成。而对于外部电路来说根本不 了解解释器对象和运算器对象的存在。也就是说cpu将整个的逻辑过程都封装在自己内部。只暴露给用户一个简单的计算接口。这就是门面模式。 还有一个非常浅显的例子就是GUI的界面编写,我们大部分编写应用的时候大都采用MVC的设计框架。或者可以说我们在写界面的时候是完全可以脱离业务逻辑 而存在的。当我们为了完成一个按钮的功能的时候,我们常常只关心这个按钮所提供的单个接口,而不关心内部的细节。这样就避免了所谓的接口泛滥。比如说,我 们有一个保存的按钮,实际上我们只希望调用save接口就能完成所有的事情。至于你save接口里面采用的究竟是数据库,文件,还是云的方式根本就不关 心,在存储之前和之后要做的业务逻辑处理有业务处理模块来完成。对gui的设计者而言,看到只有save的这个门面接口。不知道大家这时候是否恍然大悟? 是否捶胸顿足,原来我之前写的代码形式就是按门面模式的方式在写。是的,其实大家不用把设计模式想成一门学科,它就是一门艺术,或者说一种编写模式。它是 对人们编写代码的一种抽象。大家不理解模式是因为并没有将你自己写的写法进行抽象,所以你认为你写的东西没有一点模式,其实是完全错误的,你之所以这么 写,一定是有一种模版在你脑子里面。回头我们再聊一下门面模式,如果说门面模式是对系统的更高层次的抽象,那么工厂模式是否可以称之为一个门面呢?我个人 觉得你要从概念上来说也是合理的。但是工厂的侧重在构造,而门面的的要点在封装,而且是高层次的封装。我不知道我刚才说得模式的理解是否打动了你们?我说 一个简单的例子,我翻看某博主写的单例模式的理解的时候将内存问题也归咎于模式本身,因为模式本身就是一种抽象,又何来问题之有。而且从功能性来说,单例 模式本身就是要有一个不变的持有对象,对象释放才是怪事。我希望我们在探讨模式的时候是先理解模式的概念,而不是写了一行代码就认为代表模式,然后在代码 上吹毛求疵。。当然,模式从不同的角度有不同的观点,还是那句话,你从你的角度上看,可能有不同的抽象风景。每个空间,每个时间我们可能从相同的代码中可 以看到不同的代码模式。我们回到《三国杀》这款游戏来。显而易见,三国杀是一个GUI的程序。在刚打开程序的时候就有让你选择服务器的选项,这就是一个网络服务的门面;
我们现在理性的来分析这个小功能,实际上对于GUI系统来说只希望有一个登陆的业务模块,这个登陆的模块能完成所谓的不同的服务区域的对接;我们姑且定义这个类为
class LoginAction {
public void login(long id);//参数为服务器编号
}
对于Gui层只调用控制层,而控制层来说只用调用LoginAction.login()就完成操作了.当然我们知道login里面可能有很多的业务逻辑。我们假定有下列的逻辑:
login(){
InetChecker.check()//检查网络
PersonNumberChecker()//服务器负载人员检查
loginnow();//服务器登陆
Controller.gotoOtherPage();//跳转到另外一个UI界面
}
可 见,一个简单的登陆接口可能要跟很多的系统打交道。而如果把这些逻辑都放在控制层,或者说是调用者。那么意味着你就要跟多个系统模块打交道。无形中增加了 你模块之间的耦合度。举个很简单的例子,假如说我对服务器负载的检查变更了接口,需要多传递几个参数,或者说要变更成一个新的模块。那么你之前硬编码到代 码中的那些代码就成了无用类。门面是对系统的高层抽象,它存在的目的是为何调和系统直接的相互调用的关系。至于在某些书中提到的要将门面写成单例的我觉得 其实是没有必要的。当然具体问题当然要具体分析。
--非子墨
微博账号: 非子墨
QQ:1025250620
CSDN:《非子墨》的空间
相关推荐
子墨IP变换软件v1.0是一款专为用户设计的便捷IP地址切换工具,它能够帮助用户在家庭和工作场所之间快速、轻松地更改计算机的IP地址,避免了手动配置的繁琐过程。这款软件适用于那些需要频繁更换网络环境或者希望保护...
ip自动变换 适合 各种上网用户 可以用来来做网赚
很好的Ip转换刷网站东东 真的很好用 我一直用啊 你们也一起用吧
不论采用何种方式的拨号上网,均可使用本软件自动切换IP,本软件可用来刷网站的IP流量、IP切换工具来使用,本软件具备以下功能: 1)自动拨号器:自动拨号上网,断线自动重拨,支持ADSL以及路由器等标准拨号网络;...
柳子墨 飞机大战.sb3
子墨IP变换软件 V1.0.............
《子墨IP变换工具V2.0简体中文版》是一款专为用户设计的高效IP地址切换软件,尤其适用于那些需要频繁更改IP地址以实现多种网络功能或保护隐私的用户。这款工具以其简洁的界面和强大的功能,在同类产品中脱颖而出。 ...
子墨支付V7.0(安装后查看使用说明) V7.0更新内容 1.更新商户登录注册模版 2.更换商户中心模版 V6.66更新内容 1.修复登陆记录ip不显示位置bug 2.修复客户反应的已知bug V6.45更新内容 1.更加完善了3号模板 ...
【CPRI】(Common Public Radio Interface)帧格式详解 CPRI是一种专为射频单元(Radio Equipment Controller,REC)和射频单元(Radio Equipment,RE)之间通信设计的接口标准,它定义了从物理层(Layer 1)到数据...
【标题】"ZimoLoveShuang.github.io:子墨的博客" 暗示这是一个个人博客网站,由用户ZimoLoveShuang创建并托管在GitHub上。博客通常用于分享技术文章、个人见解或项目经验,因此我们可以期待这个博客中包含有关IT...
报告提到了北京市的城市空间发展战略,即“两轴、两带、多中心”模式,这为项目提供了发展机遇。通过在郊区建立适合50万人口居住和工作的新型城市,可以缓解市中心的人口压力。 4. **绿色住宅**: 报告强调了项目...
策略模式
“华为杯”第二十一届中国研究生数学建模竞赛d题.pdf“华为杯”第二十一届中国研究生数学建模竞赛d题.pdf“华为杯”第二十一届中国研究生数学建模竞赛d题.pdf“华为杯”第二十一届中国研究生数学建模竞赛d题.pdf...
2024年第十四届APMCM亚太地区大学生数学建模竞赛参赛纪律和论文提交方式说明.pdf2024年第十四届APMCM亚太地区大学生数学建模竞赛参赛纪律和论文提交方式说明.pdf2024年第十四届APMCM亚太地区大学生数学建模竞赛参赛...
本文以晁子墨同学的操作系统课程设计为案例,深入探讨了课程设计中涉及的三个核心部分:生产者-消费者问题、内存管理和快速文件系统。 首先,生产者-消费者问题是多线程编程中的一项经典课题,它模拟的是资源生产和...
系统功能列表里主要包括: 1.账号管理,在这里管理员可以修改个人信息,包括密码和个人资料等等。 2.用户注册管理部分是对该网站的申请注册的用户进行验证通过,管理员可以对所有用户进行删除修改和审核。 ...
计算机二级教程教程.txt计算机二级教程教程.txt计算机二级教程教程.txt计算机二级教程教程.txt计算机二级教程教程.txt计算机二级教程教程.txt计算机二级教程教程.txt计算机二级教程教程.txt计算机二级教程教程.txt...
5. 公共服务优化:大数据可以分析公众的需求和行为模式,帮助政府优化公共服务,如公共交通路线调整、医疗资源分配等。 在《大数据与城市规划》的习题中,可能涵盖了数据获取、预处理、存储、分析以及结果解释等...
2024华为杯“华为杯”第二十一届中国研究生数学建模竞赛b题.docx“华为杯”第二十一届中国研究生数学建模竞赛b题.docx“华为杯”第二十一届中国研究生数学建模竞赛b题.docx“华为杯”第二十一届中国研究生数学建模...