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

问题描述 投票:1回答:2

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

我可能会让自己感到困惑,但是,作为一个例子:不是Scanner是一个立面?请注意,我不是在问什么是Facade,而是试图确定Scanner是否是。

好吧,我宣布它,所以我可以使用某些功能,而无需联系复杂和更深层的功能,对吧?

我宣布

Scanner sc = new Scanner(System.in);

所以我可以:

String x = sc.nextLine();
java oop design-patterns facade
2个回答
2
投票

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

意图

  • 为子系统中的一组接口提供统一接口。 Facade定义了一个更高级别的接口,使子系统更易于使用。
  • 用更简单的接口包装复杂的子系统。

Scanner类符合上述两点。

检查清单

  1. 为子系统或组件确定更简单,统一的界面。
  2. 设计一个封装子系统的“包装”类。
  3. facade / wrapper捕获组件的复杂性和协作,并委托给适当的方法。
  4. 客户端仅使用(耦合到)Facade。
  5. 考虑额外的Facades是否会增加价值。

Scanner课程符合以上所有要点。因此,我们可以将Scanner视为InputStream的外观。


1
投票

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

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

Facade既减少了依赖性(耦合)又增加了客户端的抽象。请注意,Facade Pattern的图表始终显示Facade对象的多个传出箭头。

© www.soinside.com 2019 - 2024. All rights reserved.