摘要: 原创出处: 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. js电子表

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 关于管理,你可能一直有 3 个误解zz

    很多管理者认为,下属绩效低是由于其能力不行.其实,下属的绩效是由管理者决定的.一个好的管理者,必须对管理有正确的认知,才能形成有效的管理行为,让下属拥有绩效,并获得成长.来源丨春暖花开(ID:CCH_ ...

  3. win10 64位 安装scrapy

    在学习python时,不可避免下载了Anaconda,当我打算写爬虫时,urllib,requests,selenium,pyspider都已经安装好了,可以直接使用了,但是有一天我想要使用scrap ...

  4. ubuntu 安装vue+element

    1.安装npm sudo apt install npm 检测安装npm -v 因为npm安装软件慢,可设置淘宝镜像 npm config set registry https://registry. ...

  5. web测试和app测试的区别

    功能上: 功能上没有什么区别,都是用同样的方法来写用例(等效.边界值...) 架构上: web是B/S架构(浏览器和服务器)代码更新后数据会同步,可以保证所有客户一致 app是C/S架构(客户端和服务 ...

  6. mac 电脑下svn

    mac点下使用的提交代码的方式是:eclipse + svn 的插件实现,总之中间遇到了很多的问题,不过还是都解决了. 前提是你已经安装了jdk. 安装的过程不再赘述直接上链接http://www.c ...

  7. python计时器类

    import time as t class MyTimer(): def __init__(self): self.unit = ['年', '月', '日', '时', '分', '秒'] sel ...

  8. C++的学习心得

    由于我们大一就学习的c++,跳过了c语言,VB的学习,在很多方面我们掌握的并不是特别好,在这几种语言中,几乎有时候会产生混淆,通过做大量的c++的题目感觉在题目中应用的最多的就是数组.指针.对类的应用 ...

  9. vs2012升级vs2017后的一些坑

    异常信息:未能加载文件或程序集"System.Web.Helpers... 未能加载文件或程序集"System.Web.Helpers, Version=2.0.0.0, Cult ...

  10. 数据结构(二): 轻量级键值对 SparseArray

    SparseArray是Android framework中提供的轻量级的键值对数据结构,我们知道空间和效率从来都是相悖的,SparseArray的实现正是以时间来换取空间效率,适合小规模数据的存储. ...