Web中的积累:外观模式 Facade
摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢!
壹 前言
目测好久没写文章了,距离上一篇文章也有二十多天。我是怎么了?哈哈~,两个字:生命。生命似乎说大了,那健康吧。吃一堑长一智吧

思考对生活 对生命
我的信仰?佛教?基督?…当你生病了,有药吃。比如感冒了感冒药你会觉得药难吃。人吗就是那样,但当你想到了,你生病了没药可吃是多么无奈。比如我 胸闷 胸疼。随之而来的是蹦波劳累,上海-温州-家里台州,各处跑。看病,啥?无病?no
那时候的自己想起乘车就怕,四肢无力。简直是注意力,精神都没了。看代码?看着java 想着是啥我都忘了。
后来医生药倒是没有,自己颓废着…也就是那次,那次开学初。我再次乘了害怕的动车去学校了。我相信自己会慢慢好的,不熬夜,规律休息。第一个星期是最漫长的日子、听课无力,坐多了腰疼。shit!坚持…坚持…后来明显慢慢有力了。第二个星期,我开始锻炼,目前第三个星期了,我坚持锻炼了六天。fuck my heath! i am coming , hope no so late。

贰 外观模式的接触
看源码是种享受,最近各种看。没事就看,有事就忙。我觉得贵在学习吧。哈哈~ 第一次看到了是这里:

正所谓,知之为知之,用到才算真。小朽不懂,就马上去百度了下这个Facade。得知是个模式,正好呀,学呗。说罢就查了视频看,查了人家的博客看。值得看何必不看呢。
外观模式(Facade)可以江一系列复杂的包封装成一个简单的封闭接口。也可以说,一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。这里的通信的意思:彼此相互作用。它的作用提供了一个高层的接口,易于使用。
叁 外观模式的结构
Facade 为调用方定义简单的调用接口。
Clients 调用者。通过Facade接口调用提供某功能的内部类群。
Packages 功能提供者。指提供功能的类群(模块或子系统)

肆 外观模式小例子
现实中,八九十年代,没有基金的时候。国债,股票,期货…都是各自运行的。例如下面:
股票:
public class Gupiao {
public void mai() {
System.out.println("买股票");
}
}
期货:
public class Qihuo {
public void chao() {
System.out.println("买期货");
}
}
国债:
public class GuoZai {
public void mai() {
System.out.println("买国债");
}
}
如果你想买国债,买期货,你会跟各自的系统打交道。new 其中一个对象进行操作。所以这会造成下面几点:
1.耦合度增加
2.无层次化,结构不分明
自从有了基金。什么是基金,按着外观模式的说法,就是你不知道有多少种股票或者啥,基金帮你打理这些小系统。它帮你安排了各种方案,比如
基金:
public class JiJin {
private Gupiao gupiao;
private GuoZai guozai;
private Qihuo qihuo;
public JiJin() {
this.guozai = new GuoZai();
this.gupiao = new Gupiao();
this.qihuo = new Qihuo();
}
public void maiJijinA() {
this.guozai.mai();
this.gupiao.mai();
}
public void maiJijinB() {
this.guozai.mai();
this.gupiao.mai();
this.qihuo.chao();
}
}
测试案例:
public class MainClass {
public static void main(String[] args) {
JiJin jijin = new JiJin();
jijin.maiJijinB();
}
}
这样一来,其实用性就出来了:
1.为一个复杂子系统提供一个简单接口。
2.提高子系统的独立性。
3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
伍 思考在Web中
1 web三层构架,其实在数据访问层和业务逻辑层,业务逻辑层和表示层的层与层之间建立外观Facade模式应用,为复杂的子系统提供一个简单的接口或者抽象类,使得耦合大大降低。
2 在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,大多数的模式使用时也都会产生很多很小的类,这本是好事,但也给外部调用它们的用户程序带来了使用上的困难,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。
具体做法:将小类规划,分类。然后实现代理Facade。
3 在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须依赖于它。此时用外观模式Facade也是非常合适的。例如可以开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。

陆 感谢知识来源和小结
可以广泛用于WEB,项目架构。加油!!
参考资料:
google文章和自己的体会。
如以上文章或链接对你有帮助的话,别忘了在文章按钮或到页面右下角点击 “赞一个” 按钮哦。你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章
Web中的积累:外观模式 Facade的更多相关文章
- 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)
在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...
- 二十四种设计模式:外观模式(Facade Pattern)
外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 七个结构模式之外观模式(Facade Pattern)
定义: 为子系统的一组接口提供一个统一的入口,从而降低系统之间的耦合度,提高子系统的可用性.外观模式又称为门面模式,是迪米特法则的一个体现,主要目的就是降低耦合. 结构图 Facade:抽象外观类,子 ...
- 【转】设计模式(九)外观模式Facade(结构型)
设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...
- 设计模式(九)外观模式Facade(结构型)
设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...
- 设计模式(二)-- 外观模式(Facade)
设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...
- 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- IOS设计模式浅析之外观模式(Facade)
引言 在项目开发中,有时候会遇到这样的一种情景:已有系统的各个子系统之间,随着业务需求的发展,有了比较紧凑的耦合关系.现在需要利用这些子系统的功能,为移动端提供业务处理.我们该怎么应对这样的业务需求呢 ...
随机推荐
- 批处理-Java JDK环境变量配置
setx /M JAVA_HOME "C:\Program Files\Java\jdk1.8.0_131" setx /M CLASSPATH ".;%%JAVA_HO ...
- linu输出重定向
1.tee命令 ls | tee filename #若出现Permission Denied使用下面 ls | sudo tee filename #清空filename后重写 ls | sudo ...
- 利用clonezilla克隆、还原CentOS整个系统
实现目的:全盘备份CentOS 6.0系统到U盘或者到移动硬盘 操作步骤: 1.制作再生龙镜像启动光盘或U盘,插入到要备份的CentOS 6.0 Linux上面,设置好开机启动(我这里用的是U盘,所以 ...
- ADO.NET MSSSQLServer 操作简要总结
1).数据库操作首先应该是链接,链接的方式有多种,不论怎样实现最终都是把链接字符串赋值给实现了 继承自DbConnection 类的SqlConnection类实例的ConnectionString属 ...
- pom.xml文件模板、application文件模板、configuration逆向生成文件、
pom: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http:// ...
- 洛谷P1725--琪露诺(单调队列)
https://www.luogu.org/problemnew/show/P1725 关于滑动窗口的解释https://www.cnblogs.com/albert67/p/10449039.htm ...
- ModelAndView返回json对象的方法
这是在spring4之后. @RequestMapping(value = "/returnjson") public ModelAndView getfsd(){ ModelAn ...
- jdk环境变量的设置
一.jdk下载网址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二.环境变 ...
- 关于Podfile,某个第三方指定源
项目中有个指定了源,摸索好久Podfile编写方式,网上都没有 pod 'SDK名字', :source => '指定源' 其他的直接按原来的就可以了
- RabbitMQ Routing 消息路由
上篇文章中,我们构建了一个简单的日志系统.接下来,我们将丰富它:能够使用不同的severity来监听不同等级的log.比如我们希望只有error的log才保存到磁盘上. 1. Bindings绑定 上 ...