FSA全栈行动 FSA全栈行动
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr

公众号:FSA全栈行动

记录学习过程中的知识
首页
  • 移动端文章

    • Android
    • iOS
    • Flutter
  • 学习笔记

    • 《Kotlin快速入门进阶》笔记
    • 《Flutter从入门到实战》笔记
    • 《Flutter复习》笔记
前端
后端
  • 学习笔记

    • 《深入浅出设计模式Java版》笔记
  • 逆向
  • 分类
  • 标签
  • 归档
  • LinXunFeng
  • GitLqr
  • DesignPattern - 设计原则与设计模式初探
  • DesignPattern - 单例模式【创建型】
  • DesignPattern - 工厂模式【创建型】
  • DesignPattern - 原型模式【创建型】
  • DesignPattern - 建造者模式【创建型】
  • DesignPattern - 适配器模式【结构型】
  • DesignPattern - 桥接模式【结构型】
  • DesignPattern - 组合模式【结构型】
  • DesignPattern - 装饰器模式【结构型】
  • DesignPattern - 代理模式【结构型】
  • DesignPattern - 外观模式【结构型】
    • 一、外观模式介绍
    • 二、外观模式代码实现
  • DesignPattern - 享元模式【结构型】
  • DesignPattern - 策略模式【行为型】
  • DesignPattern - 模板方法模式【行为型】
  • DesignPattern - 观察者模式【行为型】
  • DesignPattern - 责任链模式【行为型】
  • DesignPattern - 命令模式【行为型】
  • DesignPattern - 迭代器模式【行为型】
  • DesignPattern - 备忘录模式【行为型】
  • DesignPattern - 状态模式【行为型】
  • 《深入浅出设计模式Java版》
FullStackAction
2021-08-25
目录

DesignPattern - 外观模式【结构型】

# 一、外观模式介绍

外观模式(Facade Pattern)又叫门面模式,隐藏系统的复杂性,定义一个高层接口,供客户端(也就是使用者)访问,该接口使得系统更加容易使用。

  • 核心组成
    • 外观角色(Facade):客户端可以调用这个角色的方法,这个外观方法知道多个子系统的功能和实际调用
    • 子系统角色(SubSystem):每个子系统都可以被客户端直接调用,子系统不知道门面的存在
  • 应用场景
    • MVC 三层架构中,各层之间使用 interface 接口进行交互,不用担心内部逻辑,降低耦合性
    • 各种第三方 SDK 大多会使用外观模式,通过一个外观类,也就是整个系统的接口只有一个统一的高层接口,这对用户屏蔽了很多实现细节,外观模式经常用在封闭 API 的常用手段
    • 对于复杂难以维护的老系统进行拓展,可以使用外观模式
    • 需要对一个复杂的模块或子系统提供一个外界访问的接口,外界对子系统的访问只要黑盒操作
  • 优点
    • 减少了系统的相互依赖,提高了灵活性
    • 符合依赖倒转原则:针对接口编程,依赖于抽象而不依赖于具体
    • 符合迪米特法则:最少知道原则,一个实体应当尽量少地与其他实体之间发生相互作用
  • 缺点
    • 增加了系统的类和链路
    • 不是很符合开闭原则,如果增加了新的逻辑,需要修改 facade 外观类

# 二、外观模式代码实现

创建子系统接口:

说明:该接口非必须,根据需要创建

public interface IMsgManager {
	void pushMsg(String msg);
}

创建子系统类:

说明:子系统不要求一定是同一类的,比如:用户登录子系统,余额查询子系统 等等

/**
 * 子系统角色:微信消息推送
 *
 * @author GitLqr
 */
public class WechatMsgManager implements IMsgManager {
	@Override
	public void pushMsg(String msg) {
		System.out.println("发送微信推送消息:" + msg);
	}
}
/**
 * 子系统角色:钉钉消息推送
 *
 * @author GitLqr
 */
public class DingDingMsgManager implements IMsgManager {
	@Override
	public void pushMsg(String msg) {
		System.out.println("发送钉钉推送消息:" + msg);
	}
}

创建外观类:

/**
 * 外观类:整合所有子系统,封装一个高层接口
 *
 * @author GitLqr
 */
public class MsgManagerFacade implements IMsgManager {

	private IMsgManager wechatMsgManager = new WechatMsgManager();
	private IMsgManager dingDingMsgManager = new DingDingMsgManager();

	@Override
	public void pushMsg(String msg) {
		wechatMsgManager.pushMsg(msg);
		dingDingMsgManager.pushMsg(msg);
	}
}
#设计模式#外观模式
DesignPattern - 代理模式【结构型】
DesignPattern - 享元模式【结构型】

← DesignPattern - 代理模式【结构型】 DesignPattern - 享元模式【结构型】→

最近更新
01
Flutter - 引擎调试(iOS篇)🛠
03-12
02
AI - AI绘画的精准控图(ControlNet)
03-01
03
AI - stable-diffusion(AI绘画)的搭建与使用
02-25
更多文章>
Theme by Vdoing | Copyright © 2020-2023 FSA全栈行动
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×