外观设计模式(结构型设计模式)

一、外观设计模式的简介

外观设计模式 Facade Pattern

  • 门面模式,隐藏系统的复杂性,并向客户端提供了⼀个 客户端可以访问系统的接⼝
  • 定义了⼀个⾼层接⼝,这个接⼝使得这系统更加容易使⽤ 

应用场景 

  • 各种第三⽅SDK⼤多会使⽤外观模式,通过⼀个外观 类,也就是整个系统的接⼝只有⼀个统⼀的⾼层接⼝, 这对⽤户屏蔽很多实现细节,外观模式经常⽤在封装API的常⽤⼿段
  • 对于复杂难以维护的⽼系统进⾏拓展,可以使⽤外观设计模式
  • 需要对⼀个复杂的模块或⼦系统提供⼀个外界访问的接⼝,外界对⼦系统的访问只要⿊盒操作 

角色 

  • 外观⻆⾊(Facade):客户端可以调⽤这个⻆⾊的⽅法, 这个外观⽅法知道多个⼦系统的功能和实际调⽤
  • 子系统⻆⾊(SubSystem):每个⼦系统都可以被客户端直接调⽤,⼦系统并不知道⻔⾯的存在 

二、优缺点 

优点

  • 减少了系统的相互依赖,提⾼了灵活性
  • 符合依赖倒转原则--针对接⼝编程,依赖于抽象⽽不依赖于具体
  • 符合迪⽶特法则--最少知道原则,⼀个实体应当尽量少地与其他实体 之间发⽣相互作⽤

缺点:

  • 增加了系统的类和链路
  • 不是很符合开闭原则,如果增加了新的逻辑,需要修改 facade外观类 

三、代码实现

/**
 * 发送消息抽象接口
 */
public interface ImessageManager {
    void pushMessage();
}
/**
 * 子系统
 */
public class DingDingMessageManager implements ImessageManager {
    @Override
    public void pushMessage() {
        System.out.println("推送钉钉消息");
    }
}

/**
 * 子系统
 */
public class MailMessageManager implements ImessageManager {
    @Override
    public void pushMessage() {
        System.out.println("推送邮件消息");
    }
}

/**
 * 子系统
 */
public class SmsMessageManager implements ImessageManager {
    @Override
    public void pushMessage() {
        System.out.println("推送短信消息");
    }
}

/**
 * 子系统
 */
public class WechatMessageManager implements ImessageManager {
    @Override
    public void pushMessage() {
        System.out.println("推送微信消息");
    }
}
/**
 * 外观类
 */
public class MessageFacade implements ImessageManager{

    private ImessageManager wechatMsgManager = new WechatMessageManager();

    private ImessageManager smsMsgManager = new SmsMessageManager();

    private ImessageManager mailMsgManager = new MailMessageManager();

    private ImessageManager dingdingMsgManager = new DingDingMessageManager();


    @Override
    public void pushMessage() {
        wechatMsgManager.pushMessage();
        smsMsgManager.pushMessage();
        mailMsgManager.pushMessage();
        dingdingMsgManager.pushMessage();
    }
}
public class Main {
    public static void main(String[] args) {
        ImessageManager imessageManager = new MessageFacade();
        //直接门面调用
        imessageManager.pushMessage();
    }
}

注释:个人学习观点以作笔记,如有瑕疵望谅解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值