使用立面图案

use*_*312 6 language-agnostic design-patterns facade

我怎么知道在我的应用程序开发中需要一个外观模式?

如何在Facade Pattern和Template Pattern之间画线?

例如:在[this]文章中,我们看到,int placeOrder(int CustomerID, List<BasketItem> Products)算法中有许多预定义的步骤.那么作者为什么不在这里使用模板模式呢?

Raf*_*ird 9

Facade处理接口,而不是实现.其目的是隐藏单个界面背后的内部复杂性,这在外部看起来很简单.在您的问题的示例中,Facade隐藏了一个方法后面的四个类(Order,OrderLine,Address,BasketItem).

模板方法处理实现.它的目的是从几个只有"填空"方式不同的算法中提取常用算法.超类中的模板方法实现了通用算法,每个子类以自己特定的方式"填充空白".

那么作者为什么不在这里使用模板模式呢?

placeOrder如果有几个类似的操作版本,那么制作模板方法是有意义的.也许像一些方法placePhoneOrder,placeInternetOrder,placeManuallyEnteredOrder可重构为一个模板placeOrder与实施只有{电话,互联网,手动}特异性差一些子类.


Kon*_*man 7

如果您希望以简化的方式向客户端公开复杂系统,或者希望在与系统不兼容的现有系统上创建外部通信层,则外观模式是合适的.这是一种结构模式.见这里:http://en.wikipedia.org/wiki/Facade_pattern

另一方面,模板模式是一种行为模式,可以在处理组件的内部实现时帮助您.见这里:http://en.wikipedia.org/wiki/Template_method_pattern