3 Façade模式
3.1 概述
又称外观模式。这个模式是现实中很常见到的一种模式,比如汽车的设计,汽车里面是很复杂的,但是开汽车是很简单的,为什么?因为汽车设计人员把汽车的复杂部分“封装”在汽车里面,只提供很简单易用的方向盘、刹车和加油给你控制汽车。这就是Façade模式,我们需要一个更简单的方式使用一个复杂的东西,并可满足我们的需要。
3.2 设计
那么如何能简单的使用一个复杂的东西呢?只需要这个复杂的东西提供我所需的功能就行了。比如,汽车向前行驶对汽车本身是一个很复杂的系统,要抽汽油燃烧,通过引擎形成动力,再通过承轴传到轮胎上,使轮胎滚动,从而使汽车前进。如果我们开车需要去控制汽车内部的这些部件的运转的话,估计没人能学会开车。那么怎么办?很简单,汽车提供一个功能——加油,我们只要脚踏油门,汽车就会前进。这样,大家都能很容易学会开车了。
3.3 实现
UML图:
无
示例代码为:
1using System;
2
3namespace Example
4{
5 /// <summary>
6 /// 示例
7 /// </summary>
8 class Example
9 {
10 /// <summary>
11 /// 应用程序的主入口点。
12 /// </summary>
13 [STAThread]
14 static void Main(string[] args)
15 {
16 UseCar useCar = new UseCar() ;
17 useCar.Drive() ;//开车
18 }
19 /// <summary>
20 /// 复杂的汽车
21 /// </summary>
22 public class Car
23 {
24 public Car() {}
25
26 public void Oil()
27 {
28 Console.WriteLine( "加油到引擎中……" ) ;
29 }
30 public void Motor()
31 {
32 Console.WriteLine( "发动引擎……" ) ;
33 }
34 public void Transmission()
35 {
36 Console.WriteLine( "动力传动中……" ) ;
37 }
38 public void Tire()
39 {
40 Console.WriteLine( "轮胎转动中……" ) ;
41 }
42 //其他方法……
43 }
44 /// <summary>
45 /// 使用汽车
46 /// </summary>
47 /// <remarks>
48 /// 使用Facade模式,用一个简单的功能(Drive)封装了汽车内部的复杂动作(Oil、Motor……)
49 /// 使用者只使用这个简单功能(Drive)就可满足控制汽车前进的需求
50 /// </remarks>
51 public class UseCar
52 {
53 public UseCar() {}
54
55 public void Drive()
56 {
57 Console.WriteLine( "准备开车!" ) ;
58 Car car = new Car() ;
59 car.Oil() ;
60 car.Motor() ;
61 car.Transmission() ;
62 car.Tire() ;
63 Console.WriteLine( "汽车行驶中!" ) ;
64 }
65 }
66 }
67}
68
2
3namespace Example
4{
5 /// <summary>
6 /// 示例
7 /// </summary>
8 class Example
9 {
10 /// <summary>
11 /// 应用程序的主入口点。
12 /// </summary>
13 [STAThread]
14 static void Main(string[] args)
15 {
16 UseCar useCar = new UseCar() ;
17 useCar.Drive() ;//开车
18 }
19 /// <summary>
20 /// 复杂的汽车
21 /// </summary>
22 public class Car
23 {
24 public Car() {}
25
26 public void Oil()
27 {
28 Console.WriteLine( "加油到引擎中……" ) ;
29 }
30 public void Motor()
31 {
32 Console.WriteLine( "发动引擎……" ) ;
33 }
34 public void Transmission()
35 {
36 Console.WriteLine( "动力传动中……" ) ;
37 }
38 public void Tire()
39 {
40 Console.WriteLine( "轮胎转动中……" ) ;
41 }
42 //其他方法……
43 }
44 /// <summary>
45 /// 使用汽车
46 /// </summary>
47 /// <remarks>
48 /// 使用Facade模式,用一个简单的功能(Drive)封装了汽车内部的复杂动作(Oil、Motor……)
49 /// 使用者只使用这个简单功能(Drive)就可满足控制汽车前进的需求
50 /// </remarks>
51 public class UseCar
52 {
53 public UseCar() {}
54
55 public void Drive()
56 {
57 Console.WriteLine( "准备开车!" ) ;
58 Car car = new Car() ;
59 car.Oil() ;
60 car.Motor() ;
61 car.Transmission() ;
62 car.Tire() ;
63 Console.WriteLine( "汽车行驶中!" ) ;
64 }
65 }
66 }
67}
68