结构型设计模式——外观模式

为子系统中的一组接口提供一个一致的界面,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     }
View Code
 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     }
View Code
 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     }
View Code
 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     }
View Code
posted @ 2025-04-14 22:20  是铭不是明  阅读(9)  评论(0)    收藏  举报