冯超

好好工作,天天向上

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

posted on 2005-07-24 22:05  超哥  阅读(785)  评论(1编辑  收藏  举报