目录
1.初步认识
- 外观设计模式 (Facade Pattern):门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口
- 定义了一个高层接口,这个接口使得这系统更加容易使用
- 需要对一个复杂的模块或子系统提供一个外界访问的接口,外界对子系统的访问只要黑盒操作
2.角色扮演
- 外观角色(Facade):客户端可以调用这个角色的方法,这个外观方法知道多个子系统的功能和实际调用
- 子系统角色(SubSystem): 每个子系统都可以被客户端直接调用,子系统并不知道门面的存在
3.代码实操
门面接口
java
/**
* 门面接口
*/
public interface ImessageManager {
/**
* 推送消息
*/
void push();
}
子系统角色
java
/**
* 具体的子系统-1
*/
public class DingDingMessageManager implements ImessageManager {
@Override
public void push() {
System.out.println("钉钉消息");
}
}
/**
* 具体的子系统-2
*/
public class SmsMessageManager implements ImessageManager{
@Override
public void push() {
System.out.println("信息消息");
}
}
/**
* 具体的子系统-3
*/
public class WeChatMessageManager implements ImessageManager {
@Override
public void push() {
System.out.println("微信消息");
}
}
外观角色
java
/**
* 外观角色,提供客户端的调用
*/
public class MessageFacade implements ImessageManager{
private ImessageManager weChat = new WeChatMessageManager();
private ImessageManager sms = new SmsMessageManager();
private ImessageManager ding = new DingDingMessageManager();
/**
* 对外提供服务门面
*/
@Override
public void push() {
weChat.push();
sms.push();
ding.push();
}
}
实测
java
public class MyMain {
public static void main(String[] args) {
//只需调用外观类,即可调用其全部方法
MessageFacade messageFacade=new MessageFacade();
messageFacade.push();
}
}
4.优缺点
- 优点:
- 减少了系统的相互依赖,提高了灵活性
- 针对接口编程,依赖于抽象而不依赖于具体
- 最少知道原则,一个实体应当尽量少地与其他实体之间发生相互作用
- 缺点:
- 增加了系统的类和链路
- 不是很符合开闭原则,如果增加了新的逻辑,需要修改facade外观类