|
>>返回《C#常用設計模式》
1. 簡介
-
概述
- 為子系統(tǒng)中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這一子系統(tǒng)更加容易使用
- 比如對同一種類型但不同廠家的設備:攝像頭、人臉識別設備、RFID讀卡器等
-
模式中的角色
- 外觀類(Facade):外觀類知道哪些子系統(tǒng)類負責處理請求,將客戶的請求代理給恰當?shù)淖酉到y(tǒng)對象。
- 子系統(tǒng)類集合(SubSystem Classes):子系統(tǒng)類集合實現(xiàn)了子系統(tǒng)的功能,處理外觀類對象指派的任務。
-
類圖

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) { }
//。。。。一堆用不上的功能
}
}
|