结构型设计模式——外观模式
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(引入一个统一的接口(外观类),为复杂子系统提供简化访问的入口,降低客户端与子系统的耦合度)。
适用于
①要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂。
②客户程序与抽象类之间的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离。可以提高子系统的独立性和可移植性
③当需要构建一个层次结构的子系统时,使用Facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,则可以让它们仅通过Facade进行通信,从而简化了它们之间的依赖关系。
类图如下

1 internal class Program 2 { 3 static void Main(string[] args) 4 { 5 //模拟酒店通过插拔房卡控制电器统一开闭 6 UniformAppliancesFacade uAFacade = new UniformAppliancesFacade(); 7 8 //插上房卡 9 Console.WriteLine("插上房卡"); 10 uAFacade.On(); 11 12 13 //拔掉房卡 14 Console.WriteLine("拔掉房卡"); 15 uAFacade.Off(); 16 } 17 }
1 /// <summary> 2 /// 统一外观类,控制其他子系统操作 3 /// </summary> 4 /// 模拟宾馆插卡拔卡操作 5 internal class UniformAppliancesFacade 6 { 7 private Light Light = new Light(); 8 private TV tV = new TV(); 9 private AirCondition airCondition = new AirCondition(); 10 11 public void On() 12 { 13 Light.On(); 14 tV.On(); 15 airCondition.On(); 16 } 17 18 public void Off() 19 { 20 Light.Off(); 21 tV.Off(); 22 airCondition.Off(); 23 } 24 }
1 internal class Light 2 { 3 public void On() 4 { 5 Console.WriteLine("打开灯。。。"); 6 } 7 8 public void Off() 9 { 10 Console.WriteLine("关闭灯。。。"); 11 } 12 }
1 internal class TV 2 { 3 public void On() 4 { 5 Console.WriteLine("打开电视。。。"); 6 } 7 8 public void Off() 9 { 10 Console.WriteLine("关闭电视。。。"); 11 } 12 }
1 internal class AirCondition 2 { 3 public void On() 4 { 5 Console.WriteLine("打开空调。。。"); 6 } 7 8 public void Off() 9 { 10 Console.WriteLine("关闭空调。。。"); 11 } 12 }

浙公网安备 33010602011771号