Facade外观模式
1. 简介
-
概述
- 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
- 比如对同一种类型但不同厂家的设备:摄像头、人脸识别设备、RFID读卡器等
- 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
-
模式中的角色
- 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。
- 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。
-
类图
2. 示例
namespace WindowsFormsApplication1
{
class Program
{
static void Main()
{
IDevice d1 = new FHCardReader();
d1.Open();
d1.Send("GpoHigh");
d1.Close();
IDevice d2 = new ImpinjCardReader();
d2.Open();
d2.Send("GpoHigh");
d2.Close();
}
}
//Facade
public interface IDevice
{
void Open();
void Close();
void Send(string msg);
}
//ConcreteFacadeA
public class FHCardReader : IDevice
{
FHReader reader = new FHReader();
FHGpo gpo = new FHGpo();
public void Open()
{
reader.Connect();
}
public void Close()
{
reader.DisConnect();
}
public void Send(string msg)
{
switch (msg)
{
case "Config": reader.ApplyConfig(); break;
case "GpoHigh": gpo.SetGpo(true); break;
case "GpoLow": gpo.SetGpo(false); break;
default:
break;
}
}
public void Send()
{
throw new NotImplementedException();
}
}
//ConcreteFacadeB
public class ImpinjCardReader : IDevice
{
ImpinjReader reader = new ImpinjReader();
public void Open()
{
reader.Connect();
}
public void Close()
{
reader.DisConnect();
}
public void Send(string msg)
{
switch (msg)
{
case "Config": reader.ApplyConfig(); break;
case "GpoHigh": reader.SetGpo(true); break;
case "GpoLow": reader.SetGpo(false); break;
default:
break;
}
}
}
//AnApi
public class ImpinjReader
{
public void Connect(){}
public void DisConnect() { }
public void ApplyConfig() { }
public void SetGpo(bool state) { }
//。。。。一堆用不上的功能
}
//B1Api
public class FHReader
{
public void Connect() { }
public void DisConnect() { }
public void ApplyConfig() { }
//。。。。一堆用不上的功能
}
//B2Api
public class FHGpo
{
public void SetGpo(bool state) { }
//。。。。一堆用不上的功能
}
}
如果您认为这篇文章还不错或者有所收获,您可以通过右边的"打赏"功能 打赏我一杯咖啡【物质支持】,也可以点击左下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!
作者: 大师兄石头
来源: https://bigbrotherstone.cnblogs.com/
声明: 原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2020-02-16 多线程共享变量和 AsyncLocal
2020-02-16 ExecutionContext(执行上下文)综述