首页 > 其他分享 >FacadePattern-门面模式

FacadePattern-门面模式

时间:2023-08-19 14:01:17浏览次数:39  
标签:Initialization 模式 FacadePattern public 门面 自检 子系统

在C#中,门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问复杂子系统中的一组接口。门面模式隐藏了子系统的复杂性,为客户端提供了一个简单的接口,使得客户端更易于使用子系统。

门面模式具有以下几个关键角色:

Facade(门面):是门面模式的核心,它提供了一个简单的接口,用于访问子系统中的一组接口。门面知道哪些子系统类负责处理请求,将客户端的请求委派给适当的子系统对象。

Subsystem(子系统):是组成子系统的类集合。它们实现了子系统的功能,处理门面对象指派的任务。

以电脑系统启动前自检为例:

CPU

namespace FacadePattern_门面模式
{
    /// <summary>
    /// 抽象CPU
    /// </summary>
    public abstract class ICPU
    {
        /// <summary>
        /// CPU自检抽象方法
        /// </summary>
        /// <returns></returns>
        public abstract bool Initialization();
    }
    /// <summary>
    /// 具体CPU
    /// </summary>
    public class AMD_CPU : ICPU
    {
        /// <summary>
        /// AMDCPU自检抽象方法
        /// </summary>
        /// <returns></returns>
        public override bool Initialization()
        {
            return true;
        }
    }
    /// <summary>
    /// 具体CPU
    /// </summary>
    public class Intel_CPU : ICPU
    {
        /// <summary>
        /// InteCPU自检抽象方法
        /// </summary>
        /// <returns></returns>
        public override bool Initialization()
        {
            return true;
        }
    }
}

RAM

namespace FacadePattern_门面模式
{
    /// <summary>
    /// 抽象内存
    /// </summary>
    public abstract class IRAM
    {
        public abstract bool Initialization();
    }
    /// <summary>
    /// 具体内存
    /// </summary>
    public class Kinston_RAM : IRAM
    {
        /// <summary>
        /// 金斯顿内存自检方法
        /// </summary>
        /// <returns></returns>
        public override bool Initialization()
        {
            return true;
        }
    }
}

HDD

namespace FacadePattern_门面模式
{
    /// <summary>
    /// 抽象硬盘
    /// </summary>
    public abstract class IHDD
    {
        /// <summary>
        /// 硬盘自检方法
        /// </summary>
        /// <returns></returns>
        public abstract bool Initialization();
    }
    /// <summary>
    /// 具体硬盘
    /// </summary>
    public class Samsung_HDD : IHDD
    {
        /// <summary>
        /// 三星硬盘自检方法
        /// </summary>
        /// <returns></returns>
        public override bool Initialization()
        {
            return true;
        }
    }
}

门面模式

namespace FacadePattern_门面模式
{
    /// <summary>
    /// 门面模式,一般为单例
    /// </summary>
    public class FacadePattern_System
    {
        private FacadePattern_System() { }
        private static FacadePattern_System facadePattern_WIN10 = new FacadePattern_System();
        public static FacadePattern_System CreateInstance()
        {
            return facadePattern_WIN10;
        }
        /// <summary>
        /// 系统自检方法
        /// </summary>
        public void Initialization()
        {
            ICPU cpu = new Intel_CPU();
            IHDD hdd = new Samsung_HDD();
            IRAM ram = new Kinston_RAM();
            if (!cpu.Initialization())
            {
                Console.WriteLine("CPU启动失败");
            }
            else if (!hdd.Initialization())
            {
                Console.WriteLine("HDD启动失败");
            }
            else if(!ram.Initialization())
            {
                Console.WriteLine("RAM启动失败");
            }
            else
            {
                Console.WriteLine("系统自检完成");
            }
        }
    }
}

客户系统

namespace FacadePattern_门面模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //获取系统实例
            FacadePattern_System facadePattern_WIN10 = FacadePattern_System.CreateInstance();
            //获取系统自检结果
            facadePattern_WIN10.Initialization();
            Console.Read();
            //输出结果
            //系统自检完成
        }
    }
}

门面模式的优点在于它将复杂的子系统隐藏在一个简单的接口后面,为客户端提供了更高层次的接口,降低了客户端与子系统的耦合性。它还使得子系统的使用更加方便和灵活,客户端只需要与门面进行交互即可。此外,如果需要修改或扩展子系统的功能,只需修改门面类而无需修改客户端代码。

标签:Initialization,模式,FacadePattern,public,门面,自检,子系统
From: https://www.cnblogs.com/ZHIZRL/p/17642393.html

相关文章

  • Squid代理服务之反向代理模式
    为公网用户做加速访问1)实验拓扑2)web服务器配置参考传统模式中的web服务器配置,这里不再重复记录操作。网关需要指向squid服务器的内网ipecho"GATEWAY=10.10.10.13">>/etc/sysconfig/network-scripts/ifcfg-ens333)安装squid服务安装步骤这里不再赘述,参考传统模式中的安装步骤。(1)开......
  • 剖析MongoDB数据库:理解NoSQL设计模式、优化查询性能和数据安全性
    MongoDB是一个流行的NoSQL文档数据库,它使用JSON样式的文档存储数据。本文将对MongoDB进行剖析,包括NoSQL设计模式、优化查询性能和数据安全性。NoSQL设计模式文档数据库MongoDB采用文档数据库的设计模式,即将相关数据保存在单个文档中,而不是将其拆分成多个表。这种设计模式使得数......
  • Squid代理服务之透明模式部署
    为内网用户做加速访问,客户端无需手动设置代理即可访问公网中的web服务器。1)实验拓扑2)修改squid配置文件指定squid为透明模式vim/etc/squid/squid.confhttp_port10.10.10.12:3128transparent(透明模式)visible_hostnamelvs_backup(不添加也可以)3)配置iptables策略vim......
  • DecoratorPattern-装饰器模式
    在C#中,装饰器模式(DecoratorPattern)是一种结构型设计模式,它允许您在不改变现有对象的情况下动态地向其添加功能。装饰器模式通过将对象包装在装饰器对象中来实现,在运行时动态地添加新的行为或修改现有行为。装饰器模式有以下几个关键角色:Component(组件):定义了一个抽象接口,可以是......
  • 一文带你读懂设计模式之责任链模式
    1.前言emm,翻了一下之前刚入职时候的学习笔记,发现之前在熟悉业务代码的时候曾经专门学习并整理过过设计模式中的责任链模式,之前只是对其简单了解过常用的设计模式有哪些,并未结合实例和源码深入对其探究,利用熟悉代码契机进行系统学习并整理文档如下。2.什么是责任链模式?俗话说没......
  • 28、中继配置DHCP服务(relay模式)
    中继配置的意义:DHCP服务器与DHCP客户端不在同一网段内,避免每一个网段都布置DHCP服务,DHCP中继负责DHCP服务器与DHCP客户端之间的DHCP报文转发。1、拓扑如下2、交换机配置 SW2的配置如下Thedeviceisrunning!<Huawei>sysEntersystemview,returnuserviewwithCtrl......
  • 设计模式-代理模式
    代理模式(文章目录)什么是代理模式  代理模式(ProxyDesignPattern)的原理和代码实现都不难掌握。它在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。为什么要用代理模式职责清晰,功能增强部分代码可以放到代理类中,减少与业务代码的耦合;更符合......
  • CompositePattern-组合模式
    在C#中,组合模式(CompositePattern)是一种结构型设计模式,它允许您将对象组合成树状的结构,以表示部分-整体的层次关系,使得客户端可以以一致的方式处理单个对象和对象组合。在组合模式中,有以下几个角色:Component(组件):是组合中所有对象的通用接口,可以是抽象类或接口。它声明了一些操作......
  • 请解释自动装配模式的区别?
    在Spring框架中,自动装配是一种通过Spring容器在应用程序的不同组件之间自动建立依赖关系的机制。它简化了组件之间的配置工作,减少了手动设置依赖的繁琐步骤。Spring提供了几种自动装配模式,其中最常用的有三种:no、byType和byName。no(默认):这是默认的自动装配模式。它表示不进行自动......
  • X710网卡LACP模式下ifdown网卡后交换机侧依然处于UP状态,导致网络通信异常
    以下配置属于临时配置,重启后失效,具体建议在bios或者固件中解决。主要包含两个配置:1、使用ifdown命令关闭网卡无法使linkdown,交换机侧依然认为端口UP进行流量转发,无法正常通信2、在某些环境中,LACP可能无法正常工作,这些环境要求将包含LCAP信息的LLDP帧转发到网络堆栈。#查看网卡......