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外观类。
posted @ 2023-01-12 15:35  冰融心  阅读(48)  评论(0)    收藏  举报