概述
- 比如对同一种类型但不同厂家的设备:摄像头、人脸识别设备、RFID读卡器等
- 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
模式中的角色
- 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。
- 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。
类图
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) { } //。。。。一堆用不上的功能 } }