【结构型】Facade模式
外观模式主要意图是为子系统提供一个统一的接口,从而使用用户对子系统的直接依赖中,解耦合出来。Facade主要是通过为子系统统一封装个入口一样,原先用户对子系统的接口、类等都是直接访问,现在要通过Facade这层封装来访问,它就好比是个中转站、一个杂货店一样。
软件工程中就提供多层设计,最常见的就是两层、三层设计结构。比如:一个模块要有数据管理层,之上还有业务逻辑层,再之上还有展示层、控制层等等。其实此处的业务逻辑层就有可理解为Facade对象。下面先看一下不使用外观模式系统设计结构参考:

从中可以看出,系统结构混乱不堪。如果子系统随便改动一下,都有可能引起上层的一系列多米诺效应。下面再看下使用Facade模式的系统设计结构图参考:

加上Facade的好处是:子系统变动并不会引起上层的修改,最多只需要调整Facade的相关接口即可(当然这要在设计好编码)。这也是我们平时写模块时,最好要有个业务逻辑层的原因。个人见过许多编程人员在收到需求后,就开始写功能。然后界面上直接使用数据,并处理一些业务相关的,有的甚至更绝,直接在界面上监听消息等。试想下,如果哪天数据变了了?需求变了了?那界面就要大改,而且更重要的,有多个模块都需要用到这份数据,且业务逻辑也都是一样的,那怎么办?那就要变成不同的界面都是原原本本地再写一遍这个逻辑(这里又与行为型的Observer模式有点关系)。为此,业务逻辑层就显的很有必要。
前面也说过,Facade其实就像一个门店一样,用户,需要什么东西,只要子系统有的,它都可以提供。同时就跟真实商店一样,有些东西它也可以不供应。比如:一些违法、禁品等。这在实际编程中就可理解为:整个子系统的众多接口、类中,Facade可以决定需要把哪些接口、对象向高层提供,而对于某些接口其实也没必要提供。比如:一些高级接口,因为多数人用不到,只有少数高手,对底层子系统十分了解的,这些人,可以直接“伸手”向子系统要。
因此,Facade模式的主要目的、思想,是为了让系统的设计更加清晰,让上层脱离对子系统的直接依赖,并且对高层“绝大多数用户”提供一个统一一致的操作接口,以方便使用。
【结构型】Facade模式的更多相关文章
- JAVA设计模式(09):结构型-代理模式(Proxy)
代理模式是经常使用的结构型设计模式之中的一个,当无法直接訪问某个对象或訪问某个对象存在困难时能够通过一个代理对象来间接訪问,为了保证client使用的透明性,所訪问的真实对象与代理对象须要实现同样的接 ...
- 结构型--代理模式(Proxy)
一.代理模式是什么? 代理模式属于GOF23设计模式中结构型中的设计模式,通过代理对象来屏蔽(部分或者屏蔽)对真实对象的直接访问,下图为UML图: 在代理模式中组件包括:抽象角色接口.代理角色类.真实 ...
- 结构型---外观模式(Facade Pattern)
定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更容易使用.使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通 ...
- 结构型---组合模式(Composite Pattern)
组合模式的定义 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合. 组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口 ...
- 结构型---桥接模式(Bridge Pattern)
定义 桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化.桥接模式的目的就是使两者分离,根据面向对象的封装变化的原则,我们可以把实现部分的变化封装到另外一个类中,这样的一个思路也就是桥接模式的实现 ...
- 结构型---代理模式(Proxy Pattern)
代理模式的详细介绍 代理模式按照使用目的可以分为以下几种: 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象.这个不同的地址空间可以是本电脑中,也可以在另一台电脑中.最典型 ...
- 设计模式之美:Structural Patterns(结构型模式)
结构型模式涉及到如何组合类和对象以获得更大的结构. 结构型类模式采用继承机制来组合接口实现. 结构型对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法. 因为 ...
- C#设计模式之十三代理模式(Proxy)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第七个模式,也是"结构型"设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字 ...
- C#设计模式之十二代理模式(Proxy Pattern)【结构型】
一.引言 今天我们要讲[结构型]设计模式的第七个模式,也是“结构型”设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字上来看看.“代理”可以理 ...
- 结构型模式(七) 代理模式(Proxy)
一.动机(Motivate) 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者.或者系统结构带来很多麻烦.如何在不 ...
随机推荐
- -_-#【Backbone】Collection
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 【转】 Ubuntu samba服务器搭建及测试--不错
原文网址:http://blog.csdn.net/longfeey/article/details/5937968 Ubuntu samba服务配置是很不错的文件应用很有学习价值, 这里我主要讲解U ...
- Hadoop Compression
文件压缩主要有两方面的好处:一方面节省文件存储空间:另一方面加速网络数据传输或磁盘读写.当处理大规模的数据时这些效果提升更加明显,因此我们需要仔细斟酌压缩在Hadoop环境下的使用. 目前已经存在 ...
- where T:class 泛型类型约束
对于一个定义泛型类型为参数的函数,如果调用时传入的对象为T对象或者为T的子类,在函数体内部如果需要使用T的属性的方法时,我们可以给这个泛型增加约束: 类的定义 public class Product ...
- [转载]Android相关开发网站
my: Android 开发官方文档国内镜像-踏得网: http://wear.techbrood.com/index.html 转载自: http://my.oschina.net/luforn/b ...
- PS:改装店收的是友情价,包安装十五个毛主席。
糟糠之妻下堂,娇俏公主上位--更换宝马三系座椅作业 - 切诺基 Jeep家族 越野e族论坛 越野/SUV/旅行/赛事/改装/互动中心 PS:改装店收的是友情价,包安装十五个毛主席.
- java:利用数组实现将古诗词纵向输出
java:利用二维数组实现将古诗词纵向输出. 从网络上随便搜索一首古诗词,这里刻意选择句子长短不一的诗词 1.首先先把诗词放进一个二维数组中. 这里将数组类型定义成char 类型,因为将其定义为S ...
- motan源码分析六:客户端与服务器的通信层分析
本章将分析motan的序列化和底层通信相关部分的代码. 1.在上一章中,有一个getrefers的操作,来获取所有服务器的引用,每个服务器的引用都是由DefaultRpcReferer来创建的 pub ...
- JavaScript新手学习笔记1——数组
今天,我复习了一下JavaScript的数组相关的知识,总结一下数组的API: 总共有11个API:按照学习的先后顺序来吧,分别是: ① toString() 语法:arr.toString(); ...
- 【ArcGIS 10.2新特性】Geodatabase 10.2 常见问题
地理数据库技术一直以来都是ArcGIS的基础技术.为充分使用ArcGIS的全部功能则需要把数据存储在Geodatabase当中.Geodatabase是一个综合性的信息模型,它可以支持存储几乎任意类型 ...