冯超

好好工作,天天向上

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

6        Bridge模式

6.1      概述

Bridage模式就是把抽象部分和它的实现部分分离开来,让两者可独立变化。这里的抽象部分指的是一个概念层次上的东西,它的实现部分指的是实现这个东西的(功能)部分,分离就把实现部分从它要实现的抽象部分独立出来,自我封装成对象。

6.2      设计

思路简单理解就是:在类中抽离方法形成另一个类。比如对于动物狗,有行走功能。一般我们设计时,把狗设计成一个类,里面有方法“行走”。那么Bridge模式就是把“行走”方法从“狗”类中抽离出来,形成“行走”类,并在“狗”类中使用这个“行走”对象,实现行走功能。这样,“狗”类和“行走”类都可以独立变化。

6.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            Run r = new Run() ;//狗跑
17            Dog a = new Dog( r ) ;
18            Console.Write( "Dog can " ) ;
19            a.Move() ;
20
21            Fly f = new Fly() ;//鸟飞
22            Bird b = new Bird( f ) ;
23            Console.Write( "Bird can " ) ;
24            b.Move() ;
25        }

26        /// <summary>
27        /// 动物(抽象部分)
28        /// </summary>

29        public class Animal
30        {
31            protected Movement move = null ;
32        
33            public Animal( Movement m )
34            {
35                move = m ;
36            }

37            public virtual void Move()
38            {
39                move.Move() ;
40            }

41        }

42        /// <summary>
43        /// 狗
44        /// </summary>

45        public class Dog : Animal
46        {
47            public Dog( Movement m ) : base( m ) {}
48            public override void Move()//狗运动
49            {
50                move.Move() ;
51            }

52        }

53        /// <summary>
54        /// 鸟
55        /// </summary>

56        public class Bird : Animal
57        {
58            public Bird( Movement m ) : base( m ) {}
59            public override void Move()//鸟运动
60            {
61                move.Move() ;
62            }

63        }

64        /// <summary>
65        /// 运动(实现部分)
66        /// </summary>

67        public class Movement
68        {
69            public Movement() {}
70            public virtual void Move()
71            {
72                Console.WriteLine( "Move" ) ;
73            }

74        }

75        /// <summary>
76        /// 具体的运动——跑
77        /// </summary>

78        public class Run : Movement
79        {
80            public Run() {}
81            public override void Move()
82            {
83                Console.WriteLine( "Run" ) ;
84            }

85        }

86        /// <summary>
87        /// 具体的运动——飞
88        /// </summary>

89        public class Fly : Movement
90        {
91            public Fly() {}
92            public override void Move()
93            {
94                Console.WriteLine( "Fly" ) ;
95            }

96        }

97    }

98}

99
posted on 2005-08-03 22:16  超哥  阅读(6541)  评论(3编辑  收藏  举报