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

结构型模式之外观模式

一、概述

1、定义:为子系统的一组接口提供一个统一的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

2、外观模式又称为门面模式,是迪米特法则的一种具体实现

3、通过引入一个新的外观角色降低原有系统的复杂度,同时降低客户类与子系统的耦合度

二、外观模式的结构

外观模式包含以下2个角色:

1、Facade(外观角色)

2、SubSystem(子系统角色)

三、UML图

四、模式优点

1、它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易

2、它实现了子系统与客户端之间松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可

3、一个子系统的修改对其它子系统没有任何影响,而且子系统的内部变化也不会影响到外观对象

五、模式缺点

1、不能很好地限制客户端直接使用子系统类,如果客户端访问子系统类做太多的限制则减少了可变性和灵活性

2、如果设计不当,增加了新的子系统可能需要修改外观类的源代码,违背了开闭原则

六、示例代码

#include<iostream>
using namespace std;class SubSystemA
{
public:void methodA(){cout << "方法A!" << endl;}
};class SubSystemB
{
public:void methodB(){cout << "方法B!" << endl;}
};class SubSystemC
{
public:void methodC(){cout << "方法C!" << endl;}
};class Facade
{
public:Facade(){m_objA = new SubSystemA;m_objB = new SubSystemB;m_objC = new SubSystemC;}~Facade(){delete m_objA;m_objA = nullptr;delete m_objB;m_objB = nullptr;delete m_objC;m_objC = nullptr;}void method(){m_objA->methodA();m_objB->methodB();m_objC->methodC();}
private:SubSystemA* m_objA = nullptr;SubSystemB* m_objB = nullptr;SubSystemC* m_objC = nullptr;
};int main()
{Facade facade;facade.method();return 0;
}


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

相关文章:

  • 美国高防服务器到底怎么选
  • 一文教你正确打通WSL和win10宿主机网络全通道
  • 鸿蒙(API 12 Beta3版)【Image Kit简介】图片处理服务
  • 互动营销小程序怎么制作
  • 122-域信息收集应用网络凭据CS插件AdfindBloodHound
  • Nginx--代理与负载均衡(扩展nginx配置7层协议及4层协议方法、会话保持)
  • 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main
  • 43.x86游戏实战-XXX寻找吸怪坐标
  • 探索CSS的:placeholder-shown伪类:增强表单输入体验
  • 等保二级测评:中小企业如何快速合规
  • webpack中1个文件修改会全部更新吗
  • linux性能查看命令和工具
  • Spring-MVC 结合 Swagger2
  • 等保测评基础:了解等级保护的基本概念
  • 四、Docker使用
  • 06-07 - 文件系统(下)
  • MD编辑器学习笔记
  • HttpWebRequest访问https请求被中止: 未能创建 SSL/TLS 安全通道
  • 【OpenCV】 中使用 Lucas-Kanade 光流进行对象跟踪和路径映射
  • 机器学习第五十三周周报 MAG