我正在研究设计模式,以提高自己的编程技能。现在,我正在探索立面设计模式。
我可能会感到困惑,但是,例如:Scanner
是不是门面?
请注意,我并不是在问什么是Facade,而是试图确定Scanner是否是。
好吧,我声明了它,这样我就可以使用某些功能而无需联系复杂而又深层次的功能,对吧?
我宣布
Scanner sc = new Scanner(System.in);
所以我可以:
String x = sc.nextLine();
答案 0 :(得分:2)
这是一个很好的类示例,它简化了API,并使之更清楚,更接近所使用的内容。当我们想在控制台应用InputStream
中从用户读取数据时,将很难使用。让我们看一下Facade模式的一些定义,并与Scanner
类匹配:
Scanner
类与以上两个点都匹配。
Scanner
类与以上所有点均匹配。因此,我们可以将Scanner
视为InputStream
的外观。
答案 1 :(得分:1)
Facade为其客户将一对多关系合并为一对一关系。它们变得更简单,因为它们依赖于一个(高级)外观,而不是许多(低级)单独的组件。 Facade本身接管了许多低级别的依赖项(并委托给它们)。
Scanner
与其Readable source
之间的关系是普通的旧对象组成。没有合并的依赖关系。 Scanner
确实提供了新功能,并且比Readable
更高级别的抽象,但对于许多或大多数构图关系而言,都是如此。
Facade既可以减少依赖关系(耦合),又可以增加其客户端的抽象度。请注意,“外观模式”的图始终显示“外观”对象中的多个外向箭头。