首页 > 其他分享 >重温设计模式 --- 外观模式

重温设计模式 --- 外观模式

时间:2023-07-11 12:22:08浏览次数:32  
标签:外观 void 重温 模式 public --- 设计模式 子系统 客户端

引言

外观模式是一种结构型设计模式,它为客户端提供了一个简单的接口,使得客户端能够更容易地使用复杂的子系统。外观模式通过隐藏子系统的复杂性,简化了客户端的调用过程,同时也降低了客户端与子系统的耦合度。

外观模式的核心思想是将系统的各个组件和子系统封装在一个单独的类中,称为外观类。外观类为客户端提供一个简单的接口,隐藏了系统的复杂性。客户端只需要与外观类交互,就可以使用系统的所有功能。

:::tip{title="提示"}
将外观模式具象化可以这样理解,假设我们有一个汽车工厂,它可以生产各种型号的汽车。生产一辆汽车需要很多步骤,比如设计、采购零件、组装等等。如果客户端要使用汽车工厂生产一辆汽车,那么他需要了解所有这些步骤的细节,这会使得客户端非常复杂。但是如果我们在汽车工厂的外面加上一个售车大厅,这个售车大厅就是外观。客户端只需要在售车大厅告诉售货员他想要什么型号的汽车,然后售货员会帮他完成所有的操作。这样客户端就可以很方便地使用汽车工厂了。
:::

接下来,我们使用C#实现上文描述的外观模式。

子系统类

创建设计师类采购部类组装车间类

public class Designer
{
    public void Design()
    {
        //Design a car..
    }
}

public class PurchasingDepartment
{
    public void Purchase()
    {
        //Purchase car parts..
    }
}

public class AssemblyWorkshop
{
    public void Assemble()
    {
        //Assemble car..
    }
}

外观类

创建外观类:

public class CarFacade
{
    private Designer designer;
    
    private PurchasingDepartment purchasingDepartment;
    
    private AssemblyWorkshop assemblyWorkshop;

    public CarFacade()
    {
        designer = new();
        
        purchasingDepartment = new();
        
        assemblyWorkshop = new();
    }

    public void Operation()
    {
        designer.Design();
        
        purchasingDepartment.Purchase();
        
        assemblyWorkshop.Assemble();
        
        //othre Operation ..
    }
}

这样,客户端需要一辆车的时候,只需要这样

Facade facade = new Facade();

facade.Operation();

上述示例中,DesignerPurchasingDepartmentAssemblyWorkshop是三个子系统类,CarFacade是外观类,CarFacade封装了子系统的复杂性,为客户提供了一个简单的接口Operation,而无需了解其实现细节。

结论

外观模式通常用于大型系统中,其中有多个子系统相互依赖,而客户端只需要使用其中一小部分功能。
它可以帮助客户端更容易地使用这些功能,而无需了解子系统的所有细节。
它通过将客户端代码与复杂的子系统代码解耦,简化了客户端与子系统之间的交互。

标签:外观,void,重温,模式,public,---,设计模式,子系统,客户端
From: https://www.cnblogs.com/pandefu/p/17536303.html

相关文章

  • WEB自动化-键盘操作
    实际工作中,按照用户操作习惯,进行的是模拟键盘和鼠标操作WEB。首先,导入键盘操作需要的服务#!/usr/bin/envpython#-*-coding:utf-8-*-#@Time:2023/6/2617:32#@File:P01-test-selenium.py#@Software:PyCharmfromselenium.webdriverimportKeysdefP......
  • 重温设计模式 --- 代理模式
    引言代理模式是一种结构型设计模式,它允许您提供一个代理来控制对某个对象的访问。在某些情况下,直接访问对象可能会带来一些问题,比如安全问题、性能问题等。代理模式就是为了解决这些问题而设计的。在代理模式中,有三个核心角色:抽象主题(Subject)、真实主题(RealSubject)和代理(Pro......
  • acwing -- 3358. 放养但没有完全放养
     利用计数的思想,把每个字母分配到26个桶中,下标从小到大排序,利用upper_bound即可判断#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;intmain(){strings1,s2;cin>>s1>>s2;vector<......
  • acwing -- 3370. 牛年
     大模拟,本题我们可以唯一确定每头牛的相对年龄。若无法确定牛的相对年龄,可以用图论进行遍历。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<unordered_map>usingnamespacestd;unordered_map<string,int>age,ord={{"Ox&......
  • 【雕爷学编程】Arduino动手做(158)---VL53L0X激光测距模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • ICT应用解决方案12-WLAN工作原理
    ICT应用解决方案12-WLAN工作原理1WLAN工作流程1.1AP上线AP获取IP地址并发现AC,与AC建立连接,为确保AP能够上线,AC需预先配置如下内容:配置网络互通:配置DHCP服务器,为AP和STA分配IP地址,也可将AC设备配置为DHCP服务器配置AP到DHCP服务器间的网络互通;配置AP到AC之间的网络......
  • CF407E k-d-sequence
    Description我们称一个数列为一个好的\(k-d\)数列,当且仅当我们在其中加上最多\(k\)个数之后,数列排序后为一个公差为\(d\)的等差数列。你手上有一个由\(n\)个整数组成的数列\(a\)。你的任务是找到它的最长连续子串,使得满足子串为好的\(k-d\)数列。Solution如果一段......
  • dvwa-xss漏洞演示
    又叫CSS(CrossSiteScript),跨站脚本攻击原理:指的是恶意攻击者往Web页面里插入恶意JS代码,当用户浏览该页之时,嵌入其中Web里面的JS代码会被执行,从而达到恶意的特殊目的xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就......
  • 永磁同步电机矢量控制C代码,全部从项目中总结得到,采用的S- 永磁同步电机矢量控制C代码,
    永磁同步电机矢量控制C代码,全部从项目中总结得到,采用的S-永磁同步电机矢量控制C代码,全部从项目中总结得到,采用的S-function模式仿真,与实际项目运行基本一致,可以直接复制代码移植到工程实践项目中去。ID:22390662457992412......
  • 【2023-07-09】连岳摘抄
    23:59人能尽自己的责任,就可以感觉到好像吃梨喝蜜似的,把人生苦酒的滋味给抵消了。                                                 ——狄更新你错了,你已经是星星了,......