C#设计模式--外观模式

0.C#设计模式--简单工厂模式

1.C#设计模式--工厂方法模式

2.C#设计模式--抽象工厂模式

3.C#设计模式--单例模式

4.C#设计模式--建造者模式

5.C#设计模式--原型模式

6.C#设计模式--设配器模式

7.C#设计模式--装饰器模式

8.C#设计模式--代理模式

设计模式:

外观模式(Facade Pattern)

简单介绍:

外观模式(Facade Pattern):

外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。

比如调用子系统1和子系统2的Print方法,如果没有外观模式那么你需要一个个的调用,子系统如果是少还好,多了就要疯了,这里就可以使用外观模式,调用外观模式对外提供的方法一次性完成对子系统的层层调用

生活实例:比如笔记本是一个整体,看似是一件东西,实际上只是将主机和显示器组装在一起而已,对外提供一个电源按钮,当按下电源按钮的时候,启动了主机和显示器,这里的这个电源按钮就差不多是外观模式。对外只提供了一个电源按钮。

外观模式组成:

Facade:负责子系统的的封装调用

Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务

外观模式类图:

外观模式C#代码举例:

SubSystem1:子系统1

复制代码
 1     /// <summary>
 2     /// 子系统1
 3     /// </summary>
 4     public class SubSystem1
 5     {
 6         public void Print1()
 7         {
 8             Console.WriteLine("SubSystem1");
 9         }
10     }
复制代码

SubSystem2:子系统2类

复制代码
 1     /// <summary>
 2     /// 子系统2
 3     /// </summary>
 4     public class SubSystem2
 5     {
 6         /// <summary>
 7         /// 子系统2
 8         /// </summary>
 9         public void Print2()
10         {
11             Console.WriteLine("SybSystem2");
12         }
13     }
复制代码

Facade:外观模式对外提供接口类

复制代码
 1     /// <summary>
 2     ///  外观模式对外接口类
 3     /// </summary>
 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     /// <summary>
 2     /// 客户端测试类
 3     /// </summary>
 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     /// <summary>
 2     /// 笔记本显示器
 3     /// </summary>
 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     /// <summary>
 2     /// 笔记本主机
 3     /// </summary>
 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     /// <summary>
 2     /// 笔记本对外接口类
 3     /// </summary>
 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         /// <summary>
 4         /// 用户测试类
 5         /// </summary>
 6         /// <param name="args"></param>
 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     
复制代码

运行结果:

外观模式C#工程源码下载

 

posted @   JiYF  阅读(1602)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示