C#设计模式之外观

简介:

IronMan之外观

 

接着上篇观察者内容的“剧情”,没看过的朋友也没关系,篇幅之间有衔接的关系但是影响不大。

需求:

为"兵工厂"提供各种支持,生产了各式各样的"IronMan",因为"IronMan"是智能的,它有一个"总控中心",用来使用各个部件的功能,以及 其它功能的使用。"总控中心"也是用户在穿戴时显示在用户眼前的UI。

现在遇到一个问题,大家都来看一下,"IronMan"在穿戴好启动的时候,"总控"会让"IronMan"各个部件自动自检,自检完成后要在UI那显示出 自检的结果,当然自检的顺序可以是固定的也可以是不固定的,随便怎么检查,最终是要返回所有的部件自检结果。

假设的基础结构情况:

 

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1      public  class  Component1
2     {
3          public  void  Component1Inspection()
4         {
5              //部件1自检
6         }
7     }
8      public  class  Component2
9     {
10          public  void  Component2Inspection()
11         {
12              //部件2自检
13         }
14     }
15      public  class  Component3
16     {
17          public  void  Component3Inspection()
18         {
19              //部件3自检
20         }
21     }
 

假设还有若干个部件,按照平常的状态它们都要一一的自检。在这样的情况下使用的代码则是这样的:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1      /// <summary>
2      /// 控制中心
3      /// </summary>
4      public  class  CenterController
5     {
6          /// <summary>
7          /// 启动时的行为
8          /// </summary>
9          public  void  StartBef()
10         {
11             Component1 com1 =  new  Component1();
12             com1.Component1Inspection();
13             Component2 com2 =  new  Component2();
14             com2.Component2Inspection();
15             Component3 com3 =  new  Component3();
16             com3.Component3Inspection();
17         }
18     }
 

这样做下去的话是不是很费事,而且控制中心和部件的耦合度也比较大,如果部件个数自检的修改也会牵扯到控制中心内部的修改,这样的行为是违反设计原则的。

 

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

 

 根据设计模式的中心思想来做修改,把部件自检的操作都封装在单独的一层中,让控制中心和部件解耦,我们来看一下修改后的代码:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
1      public  class  Facade
2     {
3          //自检
4          public  void  Inspection()
5         {
6             Component1 com1 =  new  Component1();
7             com1.Component1Inspection();
8             Component2 com2 =  new  Component2();
9             com2.Component2Inspection();
10             Component3 com3 =  new  Component3();
11             com3.Component3Inspection();
12         }
13     }
 

这样定义了外观类过后,再来看一下控制中心的调用修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1      /// <summary>
2      /// 控制中心
3      /// </summary>
4      public  class  CenterController
5     {
6          /// <summary>
7          /// 启动时的行为
8          /// </summary>
9          public  void  StartBef()
10         {
11             Facade facade =  new  Facade();
12             facade.Inspection();
13         }
14     }

在两层中间加入了Facade这一层,耦合的问题就迎刃而解,好像好多解耦的方式都是这样的。

 

END 下一篇是关于命令模式的说明。

 





     本文转自jinyuan0829 51CTO博客,原文链接:http://blog.51cto.com/jinyuan/1409295,如需转载请自行联系原作者


相关文章
|
设计模式 关系型数据库 C#
C#之三十八 简单工厂设计模式(下)
C#之三十八 简单工厂设计模式(下)
46 0
|
设计模式 Java C#
C#之三十八 简单工厂设计模式(上)
C#之三十八 简单工厂设计模式
109 0
|
3月前
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy&lt;T&gt;` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
106 1
|
4月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
5月前
|
设计模式 算法 C#
C#设计模式之策略模式
C#设计模式之策略模式
97 19
|
5月前
|
设计模式 安全 程序员
C#设计模式之单例模式
C#设计模式之单例模式
62 3
|
6月前
|
设计模式 存储 C#
|
6月前
|
设计模式 算法 C#
23种设计模式【C#代码举例】(上)
23种设计模式【C#代码举例】(上)
|
7月前
|
设计模式 C#
技术经验分享:C#设计模式
技术经验分享:C#设计模式
32 0
|
8月前
|
设计模式 Java C#
C#设计模式——上
C#设计模式——上