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/
声明: 原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!