博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#设计模式--外观模式
阅读量:5095 次
发布时间:2019-06-13

本文共 3423 字,大约阅读时间需要 11 分钟。

设计模式:

外观模式(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

运行结果:

 

转载于:https://www.cnblogs.com/JiYF/p/6484208.html

你可能感兴趣的文章
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
生活大爆炸之何为光速
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
WebDriverExtensionsByC#
查看>>