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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99