摘要: 原创出处: 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的更多相关文章

  1. 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)

    在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...

  2. 二十四种设计模式:外观模式(Facade Pattern)

    外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...

  3. 乐在其中设计模式(C#) - 外观模式(Facade Pattern)

    原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...

  4. 七个结构模式之外观模式(Facade Pattern)

    定义: 为子系统的一组接口提供一个统一的入口,从而降低系统之间的耦合度,提高子系统的可用性.外观模式又称为门面模式,是迪米特法则的一个体现,主要目的就是降低耦合. 结构图 Facade:抽象外观类,子 ...

  5. 【转】设计模式(九)外观模式Facade(结构型)

    设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  6. 设计模式(九)外观模式Facade(结构型)

    设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  7. 设计模式(二)-- 外观模式(Facade)

    设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...

  8. 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  9. IOS设计模式浅析之外观模式(Facade)

    引言 在项目开发中,有时候会遇到这样的一种情景:已有系统的各个子系统之间,随着业务需求的发展,有了比较紧凑的耦合关系.现在需要利用这些子系统的功能,为移动端提供业务处理.我们该怎么应对这样的业务需求呢 ...

随机推荐

  1. dubbo入门学习 四 注册中心 zookeeper入门

    一.Dubbo支持的注册中心 1. Zookeeper 1.1 优点:支持网络集群 1.2 缺点:稳定性受限于Zookeeper 2. Redis 2.1 优点:性能高. 2.2 缺点:对服务器环境要 ...

  2. Linux常用的工具软件安装

    一. linux简单介绍 linux的优势 可靠的安全性,良好的稳定性,完善的网络功能 跨平台的硬件支持,丰富的软件支持,多用户多任务 Linux的发行版本 Redhat 红帽子,最大稳定 CentO ...

  3. Paper | 深度网络中特征的可迁移性

    目录 1. 核心贡献 2. 实验设置 2.1. 任务设置 2.2. 网络设置 3. 实验结果 4. 启发 论文:How transferable are features in deep neural ...

  4. spring InitializingBean和DisposableBean init-method 和destroy-method @PostConstruct @PreDestroy

    对于初始化函数: @PostConstruct 注解的方法 InitializingBean接口定义的回调afterPropertiesSet() Bean配置中自定义的初始化函数 对于析构则与上相同 ...

  5. 【翻译】从头开始写一个时间序列数据库-Writing a Time Series Database from Scratch

    本文来自: https://fabxc.org/tsdb/, 如翻译有误,请纠正. 我是从事监控工作的.特别是Prometheus, 一个包含自定义的时间序列库以及集成Kuberntes的监控系统. ...

  6. android-音量管理

    推荐简书夕月风: 前两个主要设计音频建设置流程. 一.https://www.jianshu.com/p/a48fc2c830da 二.https://www.jianshu.com/p/892761 ...

  7. Django积木块三——静态文件和上传文件

    静态文件和上传的文件 # 静态文件 STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), ) # ...

  8. Java实现对文本文件MD5加密并ftp传送到远程主机目录

    需求描述: 客户出完账之后需要把出账的数据以文本文件的方式传送给收入管理系统,客户以前是通过本地的一个工具软件上传的,由于安全监管的原因,不允许在本地使用工具上传,因此客户希望我们在已经上线使用的系统 ...

  9. PYTHON进阶(4)

    学习内容: 1.html简介 2.html标签 3.堡垒机 一.html简介 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语 ...

  10. oracle数据导入

    1.删除原有数据库的内容 drop user username cascade; 我的数据库名为test,所以sql语句为: drop user test cascade; 2.创建表空间: 语句为: ...