3 Façade模式
3.1 概述
又称外观模式。这个模式是现实中很常见到的一种模式,比如汽车的设计,汽车里面是很复杂的,但是开汽车是很简单的,为什么?因为汽车设计人员把汽车的复杂部分“封装”在汽车里面,只提供很简单易用的方向盘、刹车和加油给你控制汽车。这就是Façade模式,我们需要一个更简单的方式使用一个复杂的东西,并可满足我们的需要。
3.2 设计
那么如何能简单的使用一个复杂的东西呢?只需要这个复杂的东西提供我所需的功能就行了。比如,汽车向前行驶对汽车本身是一个很复杂的系统,要抽汽油燃烧,通过引擎形成动力,再通过承轴传到轮胎上,使轮胎滚动,从而使汽车前进。如果我们开车需要去控制汽车内部的这些部件的运转的话,估计没人能学会开车。那么怎么办?很简单,汽车提供一个功能——加油,我们只要脚踏油门,汽车就会前进。这样,大家都能很容易学会开车了。
![](/images/cnblogs_com/fengchao/3201.jpg)
3.3 实现
UML图:
无
示例代码为:
1
using System;
2![](/Images/OutliningIndicators/None.gif)
3
namespace 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![](/Images/OutliningIndicators/InBlock.gif)
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![](/Images/OutliningIndicators/InBlock.gif)
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![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
5
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
19
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
44
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
65
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
66
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
67
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
68
![](/Images/OutliningIndicators/None.gif)