6 Bridge模式
6.1 概述
Bridage模式就是把抽象部分和它的实现部分分离开来,让两者可独立变化。这里的抽象部分指的是一个概念层次上的东西,它的实现部分指的是实现这个东西的(功能)部分,分离就把实现部分从它要实现的抽象部分独立出来,自我封装成对象。
6.2 设计
思路简单理解就是:在类中抽离方法形成另一个类。比如对于动物狗,有行走功能。一般我们设计时,把狗设计成一个类,里面有方法“行走”。那么Bridge模式就是把“行走”方法从“狗”类中抽离出来,形成“行走”类,并在“狗”类中使用这个“行走”对象,实现行走功能。这样,“狗”类和“行走”类都可以独立变化。
6.3 实现
UML图:
示例代码为:
1
using System;
2
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
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
using System;2

3
namespace Example4
{5
/// <summary>6
/// 示例7
/// </summary>8
class Example9
{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 Animal30
{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 : Animal46
{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 : Animal57
{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 Movement68
{69
public Movement() {}70
public virtual void Move()71
{72
Console.WriteLine( "Move" ) ;73
}74
}75
/// <summary>76
/// 具体的运动——跑77
/// </summary>78
public class Run : Movement79
{80
public Run() {}81
public override void Move()82
{83
Console.WriteLine( "Run" ) ;84
}85
}86
/// <summary>87
/// 具体的运动——飞88
/// </summary>89
public class Fly : Movement90
{91
public Fly() {}92
public override void Move()93
{94
Console.WriteLine( "Fly" ) ;95
}96
}97
}98
}99


