学 习模式的人对门面模式都不会太陌生,如果说工厂模式是对对象的高层次抽象的话,那么门面模式就是对对象,就是一种更高层次的抽象。这么说可能不好理解,我 们举个很好理解的例子,我们知道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:《非子墨》的空间

子墨对酒《三国杀》里论模式(二)门面模式相关推荐

  1. 设计模式---接口隔离模式之门面模式(Façade)

    前提:接口隔离模式 在组建构建过程中,某些接口之间直接的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接接口(稳定的),来隔离本来相互紧密关联的接口是一种常见的解决方案. 典型模式: 门面模 ...

  2. Java设计模式之外观模式(门面模式,迪米特法则的具体实现,抽象外观类改进)

    一.概述 引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口.简而言之,外观模式就是定义了一个高层接口,这个接口可以使得这一子系统更加容易使用. 如果没有这个外观类, ...

  3. Facade模式(门面模式)

    模式简介 门面模式用于客户端与内部系统的解耦,客户端对内部系统的调用封装在门面类中,让客户端通过门面类调用功能,从而简化了客户端对内部系统的调用. 模式UML图 代码示例(C#) 提示:可在本栏目的资 ...

  4. 门面模式php,门面模式 php

    门面模式 php //门面模式 (Facade)又称外观模式,用于为子系统中的一组接口提供一个一致的界面.门面模式定义了一个高层接口,这个接口使得子系统更加容易使用:引入门面角色之后,用户只需要直接与 ...

  5. 子墨对酒《三国杀》里论模式(一)工厂模式

    有人说模式会让代码变的优雅,也有人说模式会让你的代码更利于扩展.我个人觉得这些说 的都对.但是滥用模式一样会成为被人诟病的痛点.与其说面向对象语言考察的主要标准是语法,不如考察对模式的理解更加切合实际 ...

  6. 子墨对酒《三国杀》里论模式(肆)单例模式

    当设计模式的观点被众人所推崇的时候,单例模式似乎已经成了掌握设计模式时候要掌握的基础模式.当然我并不认为设计模式中有基础和非基础之分,我只觉得模式的应用有普遍和非普遍之别.单例模式的普遍并不体现在应用 ...

  7. 子墨对酒《三国杀》里论模式(三)适配器模式

    如果你是一个Android程序员,那么你一定对适配器模式情有独钟.如果你还不知道 适配器模式为何物,你还陶醉在自己对AdapterView子类运用的有多熟的暗中自喜中,希望这篇文章能给你当头棒喝.人们 ...

  8. 深入理解设计模式-外观模式(门面模式)

    文章目录 一.什么是外观模式 二.样例分析 三.优缺点 四.使用场景 五.Servlet源码应用解析 结尾 一.什么是外观模式 外观模式也称为门面模式,是一种通过为多个复杂的子系统提供一个一致的接口, ...

  9. 七、享元模式与门面模式详解

    10.享元模式 10.1.课程目标 1.掌握享元模式和组合模式的应用场景. 2.了解享元模式的内部状态和外部状态. 3.掌握组合模式的透明写法和安全写法. 4.享元模式和组合模式的的优缺点. 10.2 ...

最新文章

  1. C# 笔记 获取程序当前目录
  2. python什么时候进入中国-Python什么时候开始流行的?还能流行多久?
  3. java与数据结构(4)---java实现双向循环链表
  4. DenseNet详述
  5. 业内大佬怒喷 Windows 10 Cloud:最大的流氓软件!
  6. HTML单页营销宣传专题页源码
  7. 《对Java的分析总结》-Java中的垃圾回收机制中的标记-清除算法 (五)
  8. app传输数据到php,安卓app客户端和使用php的服务器端数据交互
  9. 基于SSM 的图书馆管理系统
  10. GAN网络的详细内容
  11. 微信小程序 服务器代理转发,微信小程序转发功能
  12. 机器学习入门(1、特征抽取)
  13. Vue整合甘特图(横道图、Gantt)实例
  14. 东华大学2020考研计算机复试准备上机题解析答案_基础篇(1-29)
  15. 清华大学课题组联合美团研发无人机声波定位技术获ACM SenSys顶会大奖
  16. 百度人脸产品套件————壁虎 1.开箱体验
  17. Stack Overflow 宣布推出离线版本
  18. 软件设计的不同模型:瀑布式、快速原型法、迭代式(敏捷)
  19. 偏序集的最大反链【二分图】
  20. 参照国家一级博物馆运行评估指标体系,博物馆综合业务服务平台就该如此建设

热门文章

  1. python是免费使用吗_python免费吗
  2. NFS(网络文件系统)基于什么协议
  3. Skills | latex 从下载到运行通过
  4. php分32位和64位吗,cpu32位和64位之间有什么区别?
  5. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第37讲:HTTP协议请求(响应)
  6. Java 记录(3) java 时间格式化:SimpleDateFormat 函数 :java 获取当前时间
  7. html 仿阿里双11成交额统计,2019天猫双十一 令人震撼的销售数据
  8. 系统学习机器学习之SVM(三)--Liblinear,LibSVM使用整理,总结
  9. mac看图软件哪个好用_办公记事软件哪个好?工作记事本便签app哪个好用
  10. Android 简单引入x264