一、概述
        为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
二、适用性
1.当你要为一个复杂子系统提供一个简单接口的时候。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。外观模式可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过外观层。
2.客户程序与抽象类的实现部分之间存在着很大的依赖性的时候。引入外观模式将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
3.当你需要构建一个层次结构的子系统的时候,使用外观模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过外观层进行通讯,从而简化了它们之间的依赖关系。
三、参与者
1.Facade:知道哪些子系统类负责处理请求。将客户的请求代理给适当的子系统对象。
2.Subsystemclasses:实现子系统的功能。处理由Facade对象指派的任务。没有Facade对象的任何相关信息;即没有指向Facade对象的指针。
四、类图
五、示例
Facade
  1. package cn.lynn.facade;
  2. public class ServiceManager {
  3. private IAuthService authService;
  4. private ILogService logService;
  5. private IFileService fileService;
  6. public ServiceManager() {
  7. authService = new AuthServiceImpl();
  8. logService = new LogServiceImpl();
  9. fileService = new FileServiceImpl();
  10. }
  11. public void service() {
  12. authService.auth();
  13. logService.log();
  14. fileService.file();
  15. }
  16. }

Subsystemclasses

  1. package cn.lynn.facade;
  2. public class AuthServiceImpl implements IAuthService {
  3. @Override
  4. public void auth() {
  5. System.out.println("实现认证服务!");
  6. }
  7. }
  1. package cn.lynn.facade;
  2. public class LogServiceImpl implements ILogService {
  3. @Override
  4. public void log() {
  5. System.out.println("实现日志服务!");
  6. }
  7. }
  1. package cn.lynn.facade;
  2. public class FileServiceImpl implements IFileService {
  3. @Override
  4. public void file() {
  5. System.out.println("实现文件服务!");
  6. }
  7. }

Client

  1. package cn.lynn.facade;
  2. public class Client {
  3. public static void main(String[] args) {
  4. ServiceManager serviceManager = new ServiceManager();
  5. serviceManager.service();
  6. }
  7. }

Result

  1. 实现认证服务!
  2. 实现日志服务!
  3. 实现文件服务!

GoF23种设计模式之结构型模式之外观模式的更多相关文章

  1. GoF23种设计模式之结构型模式之桥接模式

    一.概述         将类的抽象部分与实现分部分离开来,使它们都可以独立地变化. 二.适用性 1.你不希望在抽象和实现之间有一个固定的绑定关系的时候.例如:在程序运行时实现部分应可以被选择或切换. ...

  2. GoF23种设计模式之结构型模式之组合模式

    一.概述 将对象组合成树型结构以表示“部分--整体”的层次关系.组合模式使得用户对单个对象和组合对象的使用具有一致性. 二.适用性 1.你想表示对象的部分--整体层次结构的时候. 2.你希望用户忽略组 ...

  3. GoF23种设计模式之结构型模式之代理模式

    一.概述 为其他对象提供一种代理以控制对这个对象的访问. 二.适用性 1.远程代理(RemoteProxy):为一个对象在不同的地址空间土工局部代表. 2.虚代理(VirtualProxy):根据需要 ...

  4. GoF23种设计模式之结构型模式之享元模式

    一.概述  运用共享技术有效地支持大量细粒度的对象. 二.适用性 1.当一个应用程序使用了大量的对象的时候. 2.由于使用大量的独享而造成很大的存储开销的时候. 3.对象的大多数状态都可变为外部状态的 ...

  5. GoF23种设计模式之结构型模式之适配器模式

    一.概述         将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 二.适用性 1.你想使用一个已经存在的类,但是它的接口不符合 ...

  6. GoF23种设计模式之结构型模式之装饰模式

    一.概述 动态地给一个对象添加一些额外的职责.装饰模式比生成子类更为灵活. 二.适用性 1.在不影响其他对象的情况下,以动态.透明的方式给但个对象添加职责. 2.处理那些可以撤销的职责. 3.当不能采 ...

  7. Go语言实现的23种设计模式之结构型模式

    摘要:本文主要聚焦在结构型模式(Structural Pattern)上,其主要思想是将多个对象组装成较大的结构,并同时保持结构的灵活和高效,从程序的结构上解决模块之间的耦合问题. 本文分享自华为云社 ...

  8. Java经典23种设计模式之结构型模式(一)

    结构型模式包含7种:适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式. 本文主要介绍适配器模式和桥接模式. 一.适配器模式(Adapter) 适配器模式事实上非常easy.就像手 ...

  9. GoF的23种设计模式之结构型模式的特点和分类

    结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦合度低,满足 ...

随机推荐

  1. 微软官方NET Core 2.0

    NET Core 2.0 微软官方发布的.NET Core 2.0相关的博客: Announcing .NET Standard 2.0 Announcing .NET Core 2.0 F# and ...

  2. setState异步函数

    changeLeader(value){ console.log(value)   this.setState({   leader:value   },() => {   console.lo ...

  3. LindAgile~缓存拦截器支持类的虚方法了

    写它的原因 之前写过一个缓存拦截器,主要在方法上添加CachingAspect特性之后,它的返回值就可以被缓存下来,下次访问时直接从缓存中返回结果,而它有一个前提,就是你的方法需要是一个接口方法,缓存 ...

  4. cloud turbine

    turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过 turbine来监控集群下hystrix的metrics情况,通过eur ...

  5. vue2.0:(六)、移动端像素border的实现和整合引入less文件

    知识点一.如何在手机上看我们制作的移动端页面. 正常我们在电脑上都是按如下图来制作手机页面的: 如果要在手机上面看就不能用localhost了.所以,进入命令行,输入ipconfig查看本地ip地址: ...

  6. 常用的 HTML 头部标签

    曾几何时,我们已经不再手写 HTML 标签.Emmet.Markdown 等工具让我们「健步如飞」,但是我们真的了解这些标签了吗? 基本标签 使用 HTML5 doctype,不区分大小写. < ...

  7. 【简记】HTML + CSS 的一些要点(不定时更新)

    1.td占据多行 / 列时,其挤开的 td 不写(但是包裹 td 的 tr 要写) 2. display:td 的元素中的文本默认垂直不居中(table中的td中的文本是垂直居中的) 3.th虽然定义 ...

  8. LoadRunner创建脚本和场景流程

    1)脚本创建流程创建脚本->选择协议-设置录制选项-录制脚本-停止录制-优化脚本(去掉无用内容)-强化脚本(注释.代码结构调整.参数化.检查点.事物.关联)-调试脚本(观察日志) 2)场景设置的 ...

  9. 在Windows Server 2012中搭建SQL Server 2012故障转移集群

    OK~ WSFC 2012 R2 年度盛宴开始~ 在本文中,老王将用一系列的场景,把动态仲裁,动态见证,票数调整,LowerQuorumPriorityNodeID,阻止仲裁等群集仲裁技术串起来,完成 ...

  10. LINQ 基础语句

    去全部集合 using (dat0216DataContext con = new dat0216DataContext()) { //LoList   是转换成  List集合 List<Us ...