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

如何在“外观模式”和“模板模式”之间划清界线?

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

最佳答案

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

模板方法处理实现。其目的是从仅以“填补空白”方式不同的几种算法中提取通用算法。父类(super class)中的模板方法实现了通用算法,每个子类以其自己的特定方式“填补空白”。



如果存在多个类似的操作版本,则将placeOrder用作模板方法将是有意义的。也许可以将诸如placePhoneOrderplaceInternetOrderplaceManuallyEnteredOrder的一些方法重构为单个模板placeOrder,而某些子类仅实现特定于{phone,internet,manual}的差异。

09-18 02:14