我怎么知道在我的应用程序开发中需要一个Facade模式?
如何在“外观模式”和“模板模式”之间划清界线?
例如:在[this]文章中,我们看到int placeOrder(int CustomerID, List<BasketItem> Products)
在算法中具有许多预定义的步骤。那为什么作者不在这里使用模板模式呢?
最佳答案
Facade处理接口(interface),而不是实现。它的目的是将内部复杂性隐藏在一个看起来简单的单一界面后面。在您问题的示例中,外观在单个方法后面隐藏了四个类(Order,OrderLine,Address,BasketItem)。
模板方法处理实现。其目的是从仅以“填补空白”方式不同的几种算法中提取通用算法。父类(super class)中的模板方法实现了通用算法,每个子类以其自己的特定方式“填补空白”。
如果存在多个类似的操作版本,则将placeOrder
用作模板方法将是有意义的。也许可以将诸如placePhoneOrder
,placeInternetOrder
,placeManuallyEnteredOrder
的一些方法重构为单个模板placeOrder
,而某些子类仅实现特定于{phone,internet,manual}的差异。