立面是指建筑物的外观。 当穿过街道时,我们所看到的只是建筑物的外观。 该图面抽象了建筑物的所有复杂实施细节。

同样, 外观设计模式旨在为子系统中的一组接口提供统一的接口。 这个统一的接口对客户端隐藏了子系统的复杂性。 它属于结构模式类别。

Java中的java.util.Connection是外观,因为它允许我们创建数据库连接并隐藏实现细节。 同样, java.net。 URL类是另一个外观,它公开了隐藏所有涉及细节的openStream()方法。

外观模式通常是重构模式。 对于大型的复杂子系统,使用外观模式并为客户端提供友好的界面进行交互是一个相当不错的主意。

实施外观模式:

让我们首先定义一个接口– BookGenre

 public interface BookGenre { List<Book> getBookList();  } 

代表不同书籍类别的所有类都将实现此接口:

 public class Fiction implements BookGenre { ...  }   public class NonFiction implements BookGenre { ...  }   public class Technology implements BookGenre { ...  } 

我们可以让客户自己与所有子系统类进行交互,以借用一本书。

但是为了简化起见,让我们创建一个LibraryService作为外观,它将公开以下功能:

 public enum BookType { FICTION, NONFICTION, TECHNOLOGY }   public class LibraryService {  private BookGenre fiction; private BookGenre nonFiction; private BookGenre technology;  public LibraryService() { this .fiction = new Fiction(); this .nonFiction = new NonFiction(); this .technology = new Technology(); }  public void borrowBook(BookType type, String name) { List<Book> books; switch (type) { case FICTION: books = this .fiction.getBookList(); break ; case NONFICTION: books = this .nonFiction.getBookList(); break ; default : books = this .technology.getBookList(); }  Book book = BookService.findBookByName(books, name); book.setAvailability( false ); }  ...  } 

为了使实现简单,我们在此假设每个书名只有一本书。

请注意,我们尚未添加任何其他功能。 方法借书()使用现有的子系统API来执行此操作。

UML图:

我们可以将上面的示例表示为:


有了这个外观,我们的客户就可以直接与其交互,而不必自己处理系统内部细节。

值得注意的要点:

让我们快速回顾一些要点:

  • 充当子系统的入口点,并且不向子系统添加更多功能
  • 隐藏在门面类后面的子系统的复杂性; 简化了客户端的访问点
  • 消除了客户端类自行管理子系统的需要
  • 促进客户端和子系统之间的松散耦合
  • 外观类绝不限制客户对子系统的直接访问
  • 我们可以根据需要为复杂系统创建任意数量的外观。 这样做的目的是使客户端易于访问
  • 努力维护额外的代码层并将其与我们的子系统进行的更改同步

结论:

在本教程中,我们探索了另一种称为外观模式的结构设计模式。 这是一种重构模式,主要用于为复杂且设计不良的子系统提供更简单的外观。

翻译自: https://www.javacodegeeks.com/2019/08/facade-design-pattern-java.html

Java中的外观设计模式相关推荐

  1. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  2. Java中的策略设计模式

    策略设计模式是一种行为模式,其中我们有多种算法/策略来完成一项任务,所使用的算法/策略留给客户选择. 各种算法选项封装在单独的类中. 在本教程中,我们将学习在Java中实现策略设计模式. UML表示形 ...

  3. Java中的命令设计模式

    在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象之间. 发送者对象 ...

  4. Java中的状态设计模式–示例教程

    状态模式是行为设计模式之一 . 当对象根据其内部状态更改其行为时,将使用状态设计模式. 如果必须根据对象的状态更改其行为,则可以在对象中使用状态变量,并使用if-else条件块根据状态执行不同的操作. ...

  5. Java中的Memento设计模式-示例教程

    记忆模式是行为设计模式之一 . 当我们要保存对象的状态以便以后可以恢复时,可以使用Memento设计模式. 记忆模式用于以这种方式实现该目的,即在对象外部无法访问该对象的已保存状态数据,从而保护了已保 ...

  6. Java中的访问者设计模式–示例教程

    访客模式是行为设计模式之一 . 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式. 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类. 例如,假设有一个购物车,我们可以在其中添加不同类 ...

  7. Java中的策略设计模式-示例教程

    策略模式是行为设计模式之一 . 当我们对一个特定任务有多种算法,并且客户端决定在运行时使用的实际实现时,将使用策略模式. 策略模式也称为策略模式 . 我们定义了多种算法,并让客户端应用程序将算法用作参 ...

  8. Java中的迭代器设计模式–示例教程

    迭代器模式是一种行为模式,用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator接口提供了遍历集合的方法. 根 ...

  9. Java中的生成器设计模式

    Java 中的 Builder设计模式是一种创建模式,即用于创建对象,类似于 工厂方法设计模式 ,这也是创建设计模式. 在学习任何设计模式之前,我建议先找出特定设计模式要解决的问题. 众所周知, 必要 ...

最新文章

  1. 【文本分类】基于改进CHI和PCA的文本特征选择
  2. eureka的惊群效应
  3. 谁说子网掩码的1必须连续?关于像255.255.0.255这样的非连续子网掩码
  4. LUA upvalue使用陷阱一例
  5. 解决EditText不能撑满全屏的问题及EditText你应该知道的属性
  6. python云计算服务_python 云计算平台
  7. Linux Zero-copy零拷贝技术:源码示例
  8. SAP License:SAP 清帐函数示例
  9. 关系抽取之远程监督算法:别再跟我提知识图谱(下篇)
  10. python求职网站_Python 求职 Top10 城市,来看看是否有你所在的城市
  11. 计算机主机有自带的声音吗,Windows XP 系统中没有音频设备,怎么办?
  12. Jmeter进行SOAP协议接口性能测试
  13. 从零开始 CMake 学习笔记 (G)compile-flags
  14. Oracle中根据中文获取拼音首字母
  15. 数学建模——多元统计分析例题及程序
  16. 【图像重建】基于布雷格曼迭代(bregman alteration)算法集合ART算法实现CT图像重建附matlab代码
  17. 微极速彩虹易支付第四方免签支付平台源码
  18. 【阶段总结】研一上学期总结
  19. PowerQuery的数据获取界面(Excel及PowerBI)的异同-PowerQuery系列文章之二
  20. 使用 xbrowser 连接 redhatas5 linux 服务器,出现黑屏。故障分析及处理!

热门文章

  1. POJ2228-Naptime【环形结构上的dp】
  2. 一个简单的例子,学习自定义注解和AOP
  3. 6 道 BATJ 必考的 Java 面试题
  4. 部署shiro官方源码时,执行maven命令出错
  5. Jsoup代码解读之四-parser(上)
  6. springmvc常用注解
  7. Oracle入门(十四H)之良好的编程实践
  8. 面象对象设计6大原则之六:迪米特原则
  9. 金融系统中正确的金额计算及存储方式
  10. Spring入门(四)之BeanFactory