11.(结构型模式)java设计模式之外观(门面)模式
一、什么是外观(门面)模式
外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。
二、外观(门面)模式的实现方式
模式结构分析:
- 外观角色(Facade):客户端可以调用这个角色的方法,这个外观方法知道多个子系统的功能和实际调用。
- 子系统角色(SubSystem):每个子系统都可以被客户端;直接调用,子系统并不知道门面的存在。
类关系图:


统一模型:

代码实现:
查看代码
public interface ImessageManagement {
    void pushMessage();
}
public class MailMessageManagetment implements ImessageManagement {
    @Override
    public void pushMessage() {
        System.out.println("这个是邮箱推送的消息");
    }
}
public class DinddingMessageManagetment implements ImessageManagement{
    @Override
    public void pushMessage() {
        System.out.println("这个是叮叮推送的消息");
    }
}
public class SmsMessageManagetment implements ImessageManagement{
    @Override
    public void pushMessage() {
        System.out.println("这个是SMS推送的消息");
    }
}
public class WechatMessageManagetment implements ImessageManagement{
    @Override
    public void pushMessage() {
        System.out.println("这个是微信推送的消息");
    }
}
public class MessageFacade {
    ImessageManagement we=new WechatMessageManagetment();
    ImessageManagement sms=new SmsMessageManagetment();
    ImessageManagement mail=new MailMessageManagetment();
    ImessageManagement dingding=new DinddingMessageManagetment();
    /*
    * 四种推送凡方式,同时存在
    * */
    public void pushMessage() {
        we.pushMessage();
        sms.pushMessage();
        mail.pushMessage();
        dingding.pushMessage();
    }
}测试用例:
/*
* 门面模式
* */
@Test
public  void  messageFacade(){
    MessageFacade messageFacade=new MessageFacade();
    messageFacade.pushMessage();
}测试结果:
这个是微信推送的消息
这个是SMS推送的消息
这个是邮箱推送的消息
这个是叮叮推送的消息
方法评估:
优点
- 减少了系统的相互依赖,提高了灵活性。
- 符合依赖倒转原则
- 针对接口编程,依赖于抽象而不依赖于具体○符合迪米特法则。
- 最少知道原则,一个实体应当尽量少地与其他实体之间发生相互作用。
 
缺点
- 增加了系统的类和链路。
- 不是很符合开闭原则,如果增加了新的逻辑,需要修改facade外观类。
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号