Java的“扫描程序”方法与Facade GoF设计模式

时间:2019-04-10 17:41:47

标签: java oop design-patterns facade

我正在研究设计模式,以提高自己的编程技能。现在,我正在探索立面设计模式。

我可能会感到困惑,但是,例如:Scanner是不是门面? 请注意,我并不是在问什么是Facade,而是试图确定Scanner是否是。

好吧,我声明了它,这样我就可以使用某些功能而无需联系复杂而又深层次的功能,对吧?

我宣布

Scanner sc = new Scanner(System.in);

所以我可以:

String x = sc.nextLine();

2 个答案:

答案 0 :(得分:2)

这是一个很好的类示例,它简化了API,并使之更清楚,更接近所使用的内容。当我们想在控制台应用InputStream中从用户读取数据时,将很难使用。让我们看一下Facade模式的一些定义,并与Scanner类匹配:

意图

  • 为子系统中的一组接口提供统一的接口。 Facade定义了使子系统具有更高层次的接口 易于使用。
  • 用一个更简单的界面包装一个复杂的子系统。

Scanner类与以上两个点都匹配。

检查清单

  1. 确定子系统的更简单,统一的接口,或 组件。
  2. 设计一个封装子系统的'wrapper'类。
  3. 立面/包装器捕捉了建筑的复杂性和协作性 组件,并委托适当的方法。
  4. 客户端仅使用(耦合到)该Facade。
  5. 考虑其他外观是否可以增加价值。

Scanner类与以上所有点均匹配。因此,我们可以将Scanner视为InputStream的外观。

答案 1 :(得分:1)

Facade为其客户将一对多关系合并为一对一关系。它们变得更简单,因为它们依赖于一个(高级)外观,而不是许多(低级)单独的组件。 Facade本身接管了许多低级别的依赖项(并委托给它们)。

Scanner与其Readable source之间的关系是普通的旧对象组成。没有合并的依赖关系。 Scanner确实提供了新功能,并且比Readable更高级别的抽象,但对于许多或大多数构图关系而言,都是如此。

Facade既可以减少依赖关系(耦合),又可以增加其客户端的抽象度。请注意,“外观模式”的图始终显示“外观”对象中的多个外向箭头。