1、外观模式
外观模式(Facade Pattern)门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
2、案例
需要实现一个发送三种消息的功能,传统的发送需要依次调用短信接口发送短信、调用邮件接口发送邮件、调用微信推送接口推送微信,但是使用外观模式,可以将调用三种接口的方法封装起来,并且提供一个客户端可以访问的接口。
(1)发送邮件的接口及接口实现类
public interface EamilSmsService {
public void sendSms();
}
public class EamilSmsServiceImpl implements EamilSmsService{
public void sendSms() {
System.out.println("发送邮件消息");
}
}
(2)微信消息推送的接口及实现类
//微信消息推送
public interface WeiXinSmsService {
public void sendSms();
}
public class WeiXinSmsServiceImpl implements WeiXinSmsService{
@Override
public void sendSms() {
System.out.println("发送微信消息");
}
}
(3)发送短信的接口及实现类
//短信消息
public interface AliSmsService {
public void sendSms();
}
public class AliSmsServiceImpl implements AliSmsService {
@Override
public void sendSms() {
System.out.println("发送消息...");
}
}
(4)使用外观模式实现门面类(将调用三种接口的方法封装起来,并且提供一个客户端可以访问的接口)
public class Computer {
AliSmsService aliSmsService;
EamilSmsService eamilSmsService;
WeiXinSmsService weiXinSmsService;
public Computer() {
aliSmsService = new AliSmsServiceImpl();
eamilSmsService = new EamilSmsServiceImpl();
weiXinSmsService = new WeiXinSmsServiceImpl();
}
public void sendMsg() {
aliSmsService.sendSms();
eamilSmsService.sendSms();
weiXinSmsService.sendSms();
}
}
(5)客户端实现
传统调用三种接口的方式:
public class Client {
public static void main(String[] args) {
AliSmsService aliSmsService= new AliSmsServiceImpl();
EamilSmsService eamilSmsService= new EamilSmsServiceImpl();
WeiXinSmsService weiXinSmsService= new WeiXinSmsServiceImpl();
aliSmsService.sendSms();
eamilSmsService.sendSms();
weiXinSmsService.sendSms();
}
}
使用外观模式之后的调用方式:
public class Client {
public static void main(String[] args) {
new Computer().sendMsg();
}
}