结构型模式 - 桥接模式 (Structual Patterns - Bridge)

Definition
 

解耦抽象(是实现的更高层次的抽象)和它的实现,使他们可以独立变化

 

UML class diagram

 

结构型模式 - 桥接模式 (Structual Patterns - Bridge)_第1张图片 

 

Partticipants

 

Abstraction (MusicPlayer)

 

定义一个抽象的Interface
维护一个一个实现对象的引用

 

RefinedAbstraction (WebMusicPlayer, WinformMusicPlayer)

 

实现Abstraction的接口

 

Implementor (IDecode)

定义实现的类的Interface
这个接口不必与抽象的Interface相同,而实际上这俩个接口可以完全不同,常常是 实现接口紧紧提供一个现实对象的操作,
而抽象接口定义是基于一批现实对象的一个高层次的操作,其实我们可以找个看成俩个维度,其中一个维度是另外一个维度的
更高层次的抽象

 

ConcreteImplement ( Mp3Decode, APEDecode )

 

实现了Implementor 的Interface 并实现了具体的操作 

 

Sample Codes in C# 

 

 

 1  using System;
 2  using System.Collections.Generic;
 3  using System.Linq;
 4  using System.Text;
 5  using System.Threading.Tasks;
 6 
 7  namespace Sman.DesignPattern.SampleCodes.Structual
 8 {
 9      public  interface IDecode
10     {
11         void Decode();
12     }
13      public  class Mp3Decode : IDecode
14     {
15          public  void Decode()
16         {
17             Console.WriteLine( " Mp3 .... reading ");
18         }
19     }
20      public  class APEDecode : IDecode
21     {
22          public  void Decode()
23         {
24             Console.WriteLine( " APE .... reading ");
25         }
26     }
27      public  abstract  class MusicPlayer
28     {
29          public IDecode Implementor 
30         {
31              set;
32              get;
33         }
34          public  abstract  void Play();
35     }
36 
37      public  class WebMusicPlayer:MusicPlayer 
38     {
39 
40          public  override  void Play()
41         {
42             Console.WriteLine( " This is a web Music Player ");
43             Implementor.Decode();
44         }
45     }
46      public  class WinformMusicPlayer : MusicPlayer
47     {
48          public  override  void Play()
49         {
50             Console.WriteLine( " This is a Winform Music Player ");
51             Implementor.Decode();
52         }
53     }
54 }
55 
56 -- Client Codes
57 
58 MusicPlayer player =  new WinformMusicPlayer();
59 IDecode decode =  new Mp3Decode();
60 player.Implementor = decode;
61 player.Play();
62 
63 player =  new  WebMusicPlayer();
64 decode =  new APEDecode();
65 player.Implementor = decode;
66 player.Play();

 

 

原文链接:http://www.dofactory.com/Patterns/PatternBridge.aspx

 

 

你可能感兴趣的:(Pattern)