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
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