设计模式笔记(十五)– 外观模式

​外观模式(Facade Pattern)可以为复杂系统提供简单的接口。


问题提出

想象我们要创建一个手机APP,其中有一个功能是向用户推送消息。

作为极简的框架,我们有一个消息Message类承载消息内容,以及消息服务类NotificationServer 处理连接服务器、验证用户、发送消息、断开连接等任务。

根据这个框架,我们来完善下。

创建Connection类,它有disconnect方法。

创建AuthToken类。

接着补充NotificationServer 。

现在,我们到main方法里使用这些类。

这里有个问题。

每次我们向用户推送消息时,我们都得执行所有这些步骤:创建NotificationServer、连接、认证、创建消息并进行发送、断开等,太多步骤了!

使用外观模式可以解决这个问题。


解决方案

当前的结构是这样的。

这个结构有两个问题。

第一个问题我们前面已说过了,太多的步骤需要遵循。

第二个问题,main为了发送消息依赖了4个类,太多耦合了。如果应用程序有10个类要发送消息,那这10个类都要依赖这个4个类。后面如果要修改这4个类,所有要发送消息的类都要受到影响。偶合性太强!

我们要减少耦合!

外观模式就是用于解决这个问题。

我们来看看如何做。

引入一个新类NotificationService,它有一个send方法。所有的复杂的步骤都由send方法来实现。

main类只跟NotificationService类有依赖,其它需要发送消息的类也只与NotificationService类有耦合。

这就减少了耦合。

复杂的4个实现类的修改不会影响到Main类以及其他需要发送消息的类。

这就叫做外观模式(Facade Pattern)。

NotificationService充当了我们的消息推送系统的外观或前端。


代码实现

创建NotificationService类,将原先main里发送消息的相关步骤复制到send方法里。

这样以后如果需要修改NotificationServer、Connection、AuthToken、Message类时,影响的只有NotificationService类,不影响其它需要推送消息的类。

需要推送消息时,只需创建一个NotificationServer对象,并调用其send方法即可。


小结

外观模式允许我们为复杂的应用程序提供一个简单的接口。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注