c#设计模式之外观

  

<强>

,

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

<强>需求:

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

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

假设的基础结构情况:

,

 
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,,,,,///,& lt; summary>   2,,,,,///,控制中心   3,,,,,///,& lt;/summary>   4,,,,,public  class  CenterController   5,,,,,{   6,,,,,,,,,///,& lt; summary>   7,,,,,,,,,///,启动时的行为   8日,,,,,,,,,///,& lt;/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,,,,,}
 

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

,

,

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

, 
1,,,,,public  class 外观   2,,,,,{   3,,,,,,,,,//自检   4,,,,,,,,,public  void 检查()   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,,,,,///,& lt; summary>   2,,,,,///,控制中心   3,,,,,///,& lt;/summary>   null   null   null   null   null   null   null   null   null   null   null

c#设计模式之外观