设计模式:
外观模式(Facade Pattern)
简单介绍:
外观模式(Facade Pattern):
外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。
比如调用子系统1和子系统2的Print方法,如果没有外观模式那么你需要一个个的调用,子系统如果是少还好,多了就要疯了,这里就可以使用外观模式,调用外观模式对外提供的方法一次性完成对子系统的层层调用
生活实例:比如笔记本是一个整体,看似是一件东西,实际上只是将主机和显示器组装在一起而已,对外提供一个电源按钮,当按下电源按钮的时候,启动了主机和显示器,这里的这个电源按钮就差不多是外观模式。对外只提供了一个电源按钮。
外观模式组成:
Facade:负责子系统的的封装调用
Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务
外观模式类图:
外观模式C#代码举例:
SubSystem1:子系统1
1 ///2 /// 子系统1 3 /// 4 public class SubSystem1 5 { 6 public void Print1() 7 { 8 Console.WriteLine("SubSystem1"); 9 }10 }
SubSystem2:子系统2类
1 ///2 /// 子系统2 3 /// 4 public class SubSystem2 5 { 6 ///7 /// 子系统2 8 /// 9 public void Print2()10 {11 Console.WriteLine("SybSystem2");12 }13 }
Facade:外观模式对外提供接口类
1 ///2 /// 外观模式对外接口类 3 /// 4 public class Facade 5 { 6 private SubSystem1 _subSystem1; 7 private SubSystem2 _subSystem2; 8 9 public Facade()10 {11 _subSystem1 = new SubSystem1();12 _subSystem2 = new SubSystem2();13 }14 15 public void Print()16 {17 _subSystem1.Print1();18 _subSystem2.Print2();19 }20 }
用户测试类:
1 ///2 /// 客户端测试类 3 /// 4 class Client 5 { 6 static void Main(string[] args) 7 { 8 Facade facade = new Facade(); 9 facade.Print();10 Console.Read();11 }12 }
运行结果:
外观模式生活实例笔记本例子:
生活实例:比如笔记本是一个整体,看似是一件东西,实际上只是将主机和显示器组装在一起而已,对外提供一个电源按钮,当按下电源按钮的时候,启动了主机和显示器,这里的这个电源按钮就差不多是外观模式。对外只提供了一个电源按钮。
假设笔记本是由来个子系统:显示器和主机组成
当按下电源按钮,开启主机和显示器
外观模式生活实例笔记本例子类图:
外观模式生活实例笔记本例子C#代码:
PC_Monitor:笔记本显示器类
1 ///2 /// 笔记本显示器 3 /// 4 public class PC_Monitor 5 { 6 public void Open() 7 { 8 Console.WriteLine("开启显示器"); 9 }10 public void Close()11 {12 Console.WriteLine("关闭显示器");13 }14 }
PC_Host:笔记本主机类
1 ///2 /// 笔记本主机 3 /// 4 public class PC_Host 5 { 6 public void Open() 7 { 8 Console.WriteLine("开启主机"); 9 }10 public void Close()11 {12 Console.WriteLine("关闭主机");13 }14 }
PC_Facade:笔记本外观模式对外接口类
1 ///2 /// 笔记本对外接口类 3 /// 4 public class PC_Facade 5 { 6 private PC_Monitor _PC_Monitor; 7 private PC_Host _PC_Host; 8 9 public PC_Facade()10 {11 _PC_Monitor = new PC_Monitor();12 _PC_Host = new PC_Host();13 }14 15 public void Open()16 {17 Console.WriteLine("开机……");18 _PC_Monitor.Open();19 _PC_Host.Open();20 }21 22 public void Close()23 {24 Console.WriteLine("关机……");25 _PC_Host.Close();26 _PC_Monitor.Close();27 }28 }
用户测试代码:
1 class Client 2 { 3 ///4 /// 用户测试类 5 /// 6 /// 7 static void Main(string[] args) 8 { 9 PC_Facade pc_facade = new PC_Facade();10 //开机11 pc_facade.Open();12 //关机13 pc_facade.Close();14 Console.Read();15 }16
运行结果: