【结构型】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) 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者.或者系统结构带来很多麻烦.如何在不 ...
随机推荐
- BZOJ1657: [Usaco2006 Mar]Mooo 奶牛的歌声
1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 489 Solved: 338[Submi ...
- Java中BitSet使用(转)
java.util.BitSet,采用位运算: 官方API:http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html 摘要: Bit ...
- 查看Wii的系统版本信息
Wii的系统版本信息在系统设置界面就能看到: Step1:主界面 > Wii Options Step2:选择右边的Wii Settings Step3:如下图所示,当前主机的系统版本是4.2U ...
- POJ1661 Help Jimmy
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9863 Accepted: 3201 Descriptio ...
- Robot Framework 项目搭建
首先新建一个项目“RobotDemo".项目Type一般选择“Directory”形式. 项目第一层可以放3种文件:Test Suite.Directory 和 Resource File. ...
- Git学习资料整理
Git作为一个优秀的版本控制系统,是我们开发人员必须要学会使用的一个工具,接触git一年多以来,也看了不少相关资料,今天把我所看过的一些学习资源整理一下. Git入门当然首推廖雪峰廖老师的教程:Git ...
- IE 文档模型设置 免去你IE 按F12去调文档标准的烦恼。
英文原文:http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx 最近在做一个前端页面,在各种浏览器上,各种差异,各种无赖.各种郁闷. ...
- [Javascript] Advanced Reduce: Common Mistakes
Take away: Always check you ruturn the accumulator Always pass in the inital value var data = [" ...
- JMeter在里面Json数据处理方法
http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/ Json作为一种数据交换格式在网络开发.特别 ...
- Understanding AMQP, the protocol used by RabbitMQ--reference
RabbitMQ is a lightweight, reliable, scalable and portable message broker. But unlike many message b ...