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