当前位置: 首页 > news >正文

设计模式-外观模式

目录

​编辑

1.初步认识

2.角色扮演

3.代码实操

4.优缺点

1.初步认识

  • 外观设计模式 (Facade Pattern):门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口
  • 定义了一个高层接口,这个接口使得这系统更加容易使用
  • 需要对一个复杂的模块或子系统提供一个外界访问的接口,外界对子系统的访问只要黑盒操作

2.角色扮演

  • 外观角色(Facade):客户端可以调用这个角色的方法,这个外观方法知道多个子系统的功能和实际调用
  • 子系统角色(SubSystem): 每个子系统都可以被客户端直接调用,子系统并不知道门面的存在

3.代码实操

门面接口

/*** 门面接口*/
public interface ImessageManager {/*** 推送消息*/void  push();
}

子系统角色

/*** 具体的子系统-1*/
public class DingDingMessageManager implements ImessageManager {@Overridepublic void push() {System.out.println("钉钉消息");}
}/*** 具体的子系统-2*/
public class SmsMessageManager implements ImessageManager{@Overridepublic void push() {System.out.println("信息消息");}
}/*** 具体的子系统-3*/
public class WeChatMessageManager implements ImessageManager {@Overridepublic void push() {System.out.println("微信消息");}
}

外观角色


/*** 外观角色,提供客户端的调用*/
public class MessageFacade implements ImessageManager{private ImessageManager weChat = new WeChatMessageManager();private ImessageManager sms = new SmsMessageManager();private ImessageManager ding = new DingDingMessageManager();/*** 对外提供服务门面*/@Overridepublic void push() {weChat.push();sms.push();ding.push();}
}

实测

public class MyMain {public static void main(String[] args) {//只需调用外观类,即可调用其全部方法MessageFacade messageFacade=new MessageFacade();messageFacade.push();}
}

 

4.优缺点

  • 优点:
    • 减少了系统的相互依赖,提高了灵活性
    • 针对接口编程,依赖于抽象而不依赖于具体
    • 最少知道原则,一个实体应当尽量少地与其他实体之间发生相互作用
  • 缺点: 
    • 增加了系统的类和链路
    • 不是很符合开闭原则,如果增加了新的逻辑,需要修改facade外观类

http://www.mrgr.cn/news/22081.html

相关文章:

  • 智能制造核心领域:自动化、物联网、大数据分析、人工智能在现代制造业中的应用与融合
  • 远程代码执行-Log4j2漏洞
  • 三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析
  • 第二十四章 rust中的运算符重载
  • Kotlin reified改造JSON解析
  • Origin 2024中文版下载安装教程最新版百度网盘分享链接地址
  • vulhub Thinkphp5 2-rce远程代码执行漏洞
  • C++ STL 数据结构 vector基本用法
  • UnLua调用C++函数
  • 嵌入式秋招面试 学习 面试经验提醒和分享
  • 活期存款类型
  • 物联网之ESP32开发板简介、Arduino
  • 01 Docker概念和部署
  • 【重学 MySQL】十七、比较运算符的使用
  • Python画笔案例-038 绘制齿形图
  • Arch - 架构安全性_认证(Authentication)的标准和实现
  • FreeRTOS-基本介绍和移植STM32
  • 【论文编写】利用在线工具生成表格图片的Latex语句
  • k8s笔记
  • 小白也能看得懂!如何在浏览器插件的文件中合法引入第三方依赖远程代码?