17.外观模式

简介:  1外观模式的核心内容是: A:多个子系统的类 B:通过一个统一的门面进行管理 2外观模式的作用:让各各子类的运行由一个类统一进行管理。 3外观模式具体描述 门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。 门面模式提供一个高层次的接口,使得子系统更易于使用。 每一个子系统只有一个门面类,而且此门面类只有一个实例,


1外观模式的核心内容是:

A:多个子系统的类

B:通过一个统一的门面进行管理

2外观模式的作用:让各各子类的运行由一个类统一进行管理。

3外观模式具体描述

门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。

门面模式提供一个高层次的接口,使得子系统更易于使用。

每一个子系统只有一个门面类,而且此门面类只有一个实例,

也就是说它是一个单例模式。但整个系统可以有多个门面类。

 

我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,

这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。

幸好相机有Facade设计模式,把相机调整到自动档,

只要对准目标按快门就行了,一切由相机自动调整,

这样MM也可以用这个相机给我拍张照片了。

4外观模式类图

5.代码:

#include<iostream>

#include <string>

using namespace std;

//门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。

//门面模式提供一个高层次的接口,使得子系统更易于使用。

//每一个子系统只有一个门面类,而且此门面类只有一个实例,

//也就是说它是一个单例模式。但整个系统可以有多个门面类。

 

//我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,

//这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。

//幸好相机有Facade设计模式,把相机调整到自动档,

//只要对准目标按快门就行了,一切由相机自动调整,

//这样MM也可以用这个相机给我拍张照片了。

class Sub1

{

public:

    void f1()

    {

        cout << "子系统的方法 1" << endl;

    }

};

 

class Sub2

{

public:

    void f2()

    {

        cout << "子系统的方法 2" << endl;

    }

};

 

class Sub3

{

public:

    void f3()

    {

        cout << "子系统的方法 3" << endl;

    }

};

 

class Facade

{

private:

    Sub1 *s1;

    Sub2 *s2;

    Sub3 *s3;

public:

    Facade()

    {

        s1 = new Sub1();

        s2 = new Sub2();

        s3 = new Sub3();

    }

    void method()

    {

        s1->f1();

        s2->f2();

        s3->f3();

    }

};

 

int main()

{

    Facade *f = new Facade();

    f->method();

    cin.get();

    return 0;

}

运行结果如下:

目录
相关文章
|
iOS开发
SwiftUI极简教程13:NavigationView导航栏使用
SwiftUI极简教程13:NavigationView导航栏使用
2519 2
SwiftUI极简教程13:NavigationView导航栏使用
|
12月前
|
存储 传感器 人工智能
《C++ 赋能:基于概率图模型的人工智能算法实现之路》
概率图模型是人工智能领域的关键工具,以其独特的图形式表示随机变量间的条件依赖关系,广泛应用于图像识别、自然语言处理等领域。C++因其高性能和精细的内存管理,成为实现这些模型的理想选择。本文深入探讨了如何在C++中构建和优化概率图模型,涵盖模型构建、参数学习及推理算法等方面,展示了其在医疗诊断、金融风险预测等领域的应用潜力与挑战。
203 9
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
498 4
|
NoSQL Java 关系型数据库
基于java swing和mysql实现的学生选课成绩信息管理系统(源码+数据库+ER图文档+运行指导视频)
基于java swing和mysql实现的学生选课成绩信息管理系统(源码+数据库+ER图文档+运行指导视频)
486 0
|
机器学习/深度学习 算法 数据可视化
多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测
多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测
|
机器学习/深度学习 人工智能 自然语言处理
不作诗,只做事:华为盘古3.0,给大模型落地定了个调
不作诗,只做事:华为盘古3.0,给大模型落地定了个调
560 0
|
Web App开发 编解码 安全
⭐程序员必备软件图鉴⭐(建议收藏)
⭐程序员必备软件图鉴⭐(建议收藏)
1217 0
⭐程序员必备软件图鉴⭐(建议收藏)
|
数据库 Android开发
Android选择本地视频和照片上传到服务器
照片photo: 将http//本地存放照片数据库电脑ip:端口号/fileaddress.png转image (一)后台发送来的数据转换Bitmap的方法: 用法: (二)将第一针显示出来方法: 用法: 视频vedio: 使用选择器获取的 content文件转file文件方法
429 0
Android选择本地视频和照片上传到服务器
|
开发工具 Android开发 git
解决Bug:Android Studio类名误报红问题
解决Bug:Android Studio类名误报红问题
957 0
解决Bug:Android Studio类名误报红问题
|
安全 测试技术 开发工具
App 不想被“点名”,mPaaS 隐私合规检测为开发者护航数字生态建设
《个人信息保护法》的即将落地,无疑是近年来政策法规及监管标准不断细化深化、监管查处力度不断加大、处置通报常规化的又一里程碑式的具象体现,App 开发企业如若违规将会面临的各类损失也在日益增加。
1013 0
App 不想被“点名”,mPaaS 隐私合规检测为开发者护航数字生态建设