<强> 强>
,
接着上篇观察者内容的“剧”情,没看过的朋友也没关系,篇幅之间有衔接的关系但是影响不大。
<强>需求:强>
为“兵工厂”提供各种支持,生产了各式各样的“铁人”,因为“铁人”是智能的,它有一个“总控中心”,用来使用各个部件的功能,以及,其它功能的使用。“总控中心”也是用户在穿戴时显示在用户眼前的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 nullc#设计模式之外观