1.什么是外观模式
外观模式(Facade Pattern)门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
2.代码实现
假设用户注册完之后,需要调用阿里短信接口、邮件接口、微信推送接口。
我们定义EmailSmsService
,AliSmsService
,WechatSmsService
的接口和实现,这里为了不重复粘贴代码,只粘贴EmailSmsService
代码。
package com.designpattern.facade;
/**
* @description: 邮件消息服务接口
* @author: Codegitz
* @create: 2020-05-18 22:10
**/
public interface EmailSmsService {
void send();
}
package com.designpattern.facade;
/**
* @description: 邮件消息服务接口实现
* @author: Codegitz
* @create: 2020-05-18 22:10
**/
public class EmailSmsServiceImpl implements EmailSmsService {
@Override
public void send() {
System.out.println("EmailSmsServiceImpl send....");
}
}
定义一个门面类,屏蔽复杂的操作。
为了简洁些,直接在main方法进行演示,不新建演示类
package com.imooc.netty.designpattern.facade;
/**
* @description: 门面类,提供一个隐藏系统复杂性的接口
* @author: Codegitz
* @create: 2020-05-18 22:15
**/
public class Facade {
private AliSmsService aliSmsService;
private EmailSmsService emailSmsService;
private WechatSmsService wechatSmsService;
public Facade(){
aliSmsService = new AliSmsServiceImpl();
emailSmsService = new EmailSmsServiceImpl();
wechatSmsService = new WeChatSmsServiceImpl();
}
//提供一个接口,屏蔽系统操作复杂性
public void sendMsg(){
aliSmsService.send();
emailSmsService.send();
wechatSmsService.send();
}
public static void main(String[] args) {
//测试方法
new Facade().sendMsg();
}
}
运行结果如下:
AliSmsServiceImpl send....
EmailSmsServiceImpl send....
WeChatSmsServiceImpl send....
附完整代码,需要自取,顺便点个star。
3.总结
依据我个人的理解,其实外观模式我们开发中有意无意的都已经用到了,我们封装的方法提供给上一层调用就是外观模式,只不过没有留意到这是一种设计模式罢了。