首页 > 其他分享 >11_外观模式

11_外观模式

时间:2024-03-12 09:47:36浏览次数:15  
标签:11 外观 void 模式 子系统 接口 public 客户端

外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式通过将客户端与子系统之间的复杂依赖关系解耦,简化了客户端的使用。

外观模式有三个主要角色:

  1. 外观(Facade):提供了一个统一的接口,用于访问子系统中的一组接口。外观封装了子系统的复杂性,简化了客户端的使用。

  2. 子系统(Subsystems):包含一组相关的接口和实现,用于完成特定的功能。子系统可以是一个或多个类。

  3. 客户端(Client):通过使用外观接口,与子系统进行交互。

外观模式的工作原理如下:

  1. 外观模式定义了一个统一的接口,用于访问子系统中的一组接口。

  2. 外观类封装了子系统的复杂性,隐藏了子系统的具体实现细节。

  3. 客户端通过使用外观接口来和子系统进行交互,无需直接调用子系统的接口。

外观模式的优点包括:

  1. 简化了客户端的使用,客户端无需了解子系统的复杂性。

  2. 解耦了客户端和子系统,降低了客户端和子系统之间的依赖关系。

  3. 提供了一个统一的接口,使得子系统更容易使用和测试。

外观模式适用于以下场景:

  1. 当需要简化复杂子系统的接口,并提供一个统一的接口给客户端时,可以使用外观模式。

  2. 当希望解耦客户端和子系统之间的依赖关系,降低系统的耦合度时,可以使用外观模式。

总结而言,外观模式通过提供一个统一的接口,简化了客户端对复杂子系统的使用。它解耦了客户端和子系统之间的依赖关系,提高了系统的灵活性和可维护性。

 

使用场景

计算机启动过程:
->BIOS自检(处理器,内存,硬盘,显卡,声卡等)(BIOS类)
->CPU开始工作(CPU类)
->硬盘开始工作(HardDisk类)
->内存开始工作(Memory类)
->加载操作系统(OS类)
->启动完成

 

Subsystems

public class BIOS
    {
        public void SelfCheck()
        {
            Console.WriteLine("BIOS开始自检...");
        }
    }
 public class CPU
    {
        public void Run()
        {
            Console.WriteLine("CPU开始工作...");
        }
    }
public class HardDisk
    {
        public void LoadMBR()
        {
            Console.WriteLine("硬盘读取MBR主引导记录...");
        }
    }
public class Memory
    {
        public void Run()
        {
            Console.WriteLine("内存开始工作...");
        }
    }
 public class OS
    {
        public void Load()
        {
            Console.WriteLine("加载WIN11操作系统...");
        }
    }
public class Desktop
    {
        public void Display()
        {
            Console.WriteLine("启动完成,进入桌面...");
        }
    }

 

Facade

public interface IComputer
    {
        void PowerOn();
    }
 public class Computer : IComputer
    {
        private BIOS bios = null;
        private CPU cpu = null;
        private HardDisk hardDisk = null;
        private Memory memory= null;
        private OS os = null;
        private Desktop desktop = null;
        public void PowerOn()
        {
            Console.WriteLine("电脑开机...");
            bios?.SelfCheck();
            cpu?.Run();
            hardDisk?.LoadMBR();
            memory?.Run();
            os?.Load();
            desktop?.Display();
        }

        public void SetBIOS(BIOS bios) => this.bios = bios;
        public void SetCPU(CPU cpu) => this.cpu = cpu;
        public void SetHardDisk(HardDisk hardDisk) => this.hardDisk = hardDisk;
        public void SetMemory(Memory memory) => this.memory = memory;
        public void SetOS(OS os) => this.os = os;
        public void SetDesktop(Desktop desktop) => this.desktop = desktop;
    }

 

Client

internal class Client
    {
        public void Start()
        {
            Computer computer = new Computer();
            computer.SetBIOS(new Hardware.BIOS());
            computer.SetCPU(new Hardware.CPU());
            computer.SetDesktop(new Hardware.Desktop());
            computer.SetHardDisk(new Hardware.HardDisk());
            computer.SetMemory(new Hardware.Memory());
            computer.SetOS(new Hardware.OS());
            computer.PowerOn();
        }
    }

调用

static void Main(string[] args)
        {
            new Client().Start();

            Console.ReadKey();

        }

 

标签:11,外观,void,模式,子系统,接口,public,客户端
From: https://www.cnblogs.com/MingQiu/p/18067630

相关文章

  • vivado的使用步骤与仿真详解(LZQ_0311)
    vivado仿真vivado集成了HLS工具,可以直接使用C\C++\systemC语言对Xilinx的FPGA器件进行编程。用户无需手动创建RTL,通过高层次综合生成HDL级的IP核,从而加速IP创建。参考了下面的视频整理出的流程与步骤:vivado视频教程:第一讲:https://www.bilibili.com/video/BV1XU4y1M7n......
  • Redis安装之集群-哨兵模式(sentinel)模式
    官网说明:https://redis.io/docs/management/sentinel/一、背景Redis主从复制模型在一定程度上解决了读写分离、容灾恢复、数据备份、水平扩容支撑高并发的问题,但仍存在单点故障问题,即Mater宕机后,集群将无法提供写服务。二、方案原理主从复制的问题在于Mater宕机后,Slave......
  • day20240311周一python学习共100课
    day20240311周一python学习共100课。今天学到了第几课?听懂了吗?今天学10课。学3课,5课。买的好,买的少。父母家境好的家庭,会更轻松。------》第4课:编程语言就是把人的语言,转换成计算机机制能听得懂的语言(二进制语言)。1.写代码2.翻译代码到二进制。 跟着视频操作一遍就......
  • 2024.3.11 软工日报
    今天学习了安卓开发连接数据库的内容,学习时间2小时代码量150  packagecom.example.myapplication;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;publicclassmysqlhelp{publicstaticintgetUserSize(){......
  • 保护模式
    一、理解保护模式  大多数现代操作系统(包括Windows9X/NT/XP和Linux等)都是多任务的,CPU的保护模式是操作系统实现多任务的基础。了解保护模式的底层原理对学习操作系统有着事半功倍的作用。  保护模式是为了实现多任务而设计的,其名称中的“保护”就是保护任务环境中各个人物......
  • 3月11号-完成第一阶段coursera前三期课程
    前三期课程主要包含了互联网发展的历史,从二战英国,波兰对抗德国的密码战所催生的对于计算机的启蒙发明创造,之后计算机从机械结构衍生到电子管结构,中心从欧洲转移到了美国。不得不说,计算机和物理学科以及其他学科紧密相连。无论是二战时构建原始的计算机还是之后美国大学促进互联网......
  • 2024-3-11
    召回率(Recall)也被称为真正率(TruePositiveRate),是指在所有正类中,模型正确识别出的正类所占的比例。召回率越高,意味着模型遗漏的正类越少。\(Recall=\frac{真正例(TP)}{真正例(TP)+假负例(FN)}\)例子:假设在一个大型购物中心内,有一个监控系统负责行人重识别任务,目的是为了......
  • cmd 的图论练习题(近期总结 2024.3.11)
    AGC010ERearranginglink题意:一个序列\(a_{1...n}\),两个人游戏。先手打乱这个序列,然后后手可以多次选择一对相邻的互质的数交换。先手希望最终序列字典序尽量小,后手则相反。两人都绝顶聪明,求最终序列。\(1\len\le2000,\space1\lea_i\le10^8\)考虑不互质的两个数\(a_i,a......
  • 观察者模式
     观察者:publicinterfaceObserver{voidupdate(floattemperature,floathumidity,floatpressure);}主体;publicinterfaceSubject{publicvoidregisterObserver(Observerobserver);publicvoidremoveObserver(Observerobserver);......
  • 软甲工程日报3.11
    DBpackagecom.example.myapplication;importandroid.annotation.SuppressLint;importandroid.content.ContentValues;importandroid.content.Context;importandroid.database.Cursor;importandroid.database.sqlite.SQLiteDatabase;importandroid.database.sqlite.SQ......