简介
又称门面模式,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
UML图
应用场景:
- 第三方SDK大多使用该模式,通过一个外观类,可对用户屏蔽很多实现细节
- 对于复杂难以维护的老系统进行拓展
- 外界对子系统的访问只能黑盒操作,需要对一个复杂的模块或子系统提供一个对外界访问的接口
示例
- 子系统类:
public interface MessageManager {
/**
* 推送信息
*/
void pushMessage(String msg);
}
public class MailMessage implements MessageManager {
@Override
public void pushMessage(String msg) {
System.out.println("邮箱推送:" + msg);
}
}
public class SMSMessage implements MessageManager {
@Override
public void pushMessage(String msg) {
System.out.println("短信推送:" + msg);
}
}
- 外观类
public class MessageFacade implements MessageManager {
private MailMessage mailMessage = new MailMessage();
private SMSMessage smsMessage = new SMSMessage();
@Override
public void pushMessage(String msg) {
mailMessage.pushMessage(msg);
smsMessage.pushMessage(msg);
}
}
- 运行
public class Main {
public static void main(String[] args) {
MessageFacade messageFacade = new MessageFacade();
messageFacade.pushMessage("你有一条新消息!");
}
}
总结
- 优点:
- 减少系统之间的相互依赖,提高灵活性
- 符合依赖倒转原则(面向接口编程)
- 符合迪米特法则(最少知道原则,类之间应尽量少的发生相互作用)
- 缺点
- 增加了系统的调用链路
- 不符合开闭原则,如果有新增逻辑,则外观类需要进行修改