学 习模式的人对门面模式都不会太陌生,如果说工厂模式是对对象的高层次抽象的话,那么门面模式就是对对象,就是一种更高层次的抽象。这么说可能不好理解,我 们举个很好理解的例子,我们知道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地址,不用重复设置!
ip自动变换 适合 各种上网用户 可以用来来做网赚
很好的Ip转换刷网站东东 真的很好用 我一直用啊 你们也一起用吧
不论采用何种方式的拨号上网,均可使用本软件自动切换IP,本软件可用来刷网站的IP流量、IP切换工具来使用,本软件具备以下功能: 1)自动拨号器:自动拨号上网,断线自动重拨,支持ADSL以及路由器等标准拨号网络;...
柳子墨 飞机大战.sb3
子墨IP变换软件 V1.0.............
CPRI帧格式详解 --子墨祭
北京东亚荔景园项目企划提案报告 --子墨.pptx
ZimoLoveShuang.github.io:子墨的博客
子墨支付V7.0(安装后查看使用说明) V7.0更新内容 1.更新商户登录注册模版 2.更换商户中心模版 V6.66更新内容 1.修复登陆记录ip不显示位置bug 2.修复客户反应的已知bug V6.45更新内容 1.更加完善了3号模板 ...
这是一款精巧的ip转换工具,可以实现在短时间内单个ip使用较长时间
点心省电是北京风灵创景科技有限公司(点心os)开发的点心系列软件,和电池监测器Battery Monitor Widget Pro类似,拥有一键优化、预设省电模式、自动校准的时间预估、耗电指数查看和状态栏显示功能,总的来说,点心...
系统功能列表里主要包括: 1.账号管理,在这里管理员可以修改个人信息,包括密码和个人资料等等。 2.用户注册管理部分是对该网站的申请注册的用户进行验证通过,管理员可以对所有用户进行删除修改和审核。 ...
第一个在嵌式培训机构写的小项目,拿出来和大家分享下,互相学习。0.0
非常实用,作为摘要指导,对于要写论文发文章的同志来说会节省不少时间的,大家努力!
(长途汽车数据由广大网友和各汽车站提供和更新)示范站点:1、交通信息在线 http://www.jt160.com/demo/2、子墨网 http://www.zimow.com/demo/二、 长途汽车查询API适合哪些网站使用? 长途汽车查询API可以适合任何...
(列车数据从铁道部官方网站获取,保证是最新、最准确的数据)示范站点:1、交通信息在线 http://www.jt160.com/demo_lc/2、子墨网 http://www.zimow.com/demo_lc/二、 列车时刻查询API适合哪些网站使用? 列车时刻...
子墨 轻松管理问题的 git 工具 如何使用 将所有文件复制到包含所有 depos 的主文件夹 启动问题 ./zimo start num_issue main_depo_issu depo1 depo2 ... 将depo添加到问题中 ./zimo add num_issue main_depo_issu ...
二、项目方案 1. 要求输出报文,且报文输出在报文长度输出之后,所以需要先对输入报文进行缓存,根据输入报文的位宽和长度范围,此处选择合适的同步FIFO即可;(如果是IC,那么就需要自己写FIFO,可以参考本博客的...