在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