且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

极速理解设计模式系列:7.桥接模式(Bridge Pattern)

更新时间:2022-10-04 19:56:05

四个角色:抽象类(Abstraction)、扩充抽象类(RefinedAbstraction)、实现类接口(Implementor)、具体实现类(ConcreteImplementor) 

        抽象类(Abstraction):主控类,内部有一个实现类接口(Implementor)的对象可调用。

        扩充抽象类(RefinedAbstraction):扩充抽象类,个性定制自身行为和属性继承于Abstraction。

        实现类接口(Implementor):被操作类。

        具体实现类(ConcreteImplementor) :继承并实现Implementor。

 实现思路:多个扩充抽象类继承于Abstraction主控类,并且操作其内部的Implementor的行为。以此达到控制多种具体实现类的目的。这是一个多对多的关系。

 类图:

极速理解设计模式系列:7.桥接模式(Bridge Pattern)

        应用场景:人听音乐,人有很多种人(年轻人、老年人、中年人、小孩子等),音乐有很多种(摇滚音乐、乡村音乐、爵士音乐、流行音乐等)。

        分析:不同的人可以听不同种类的音乐,人的种类是会变化的,音乐的种类也是活动可变的,在这里将人和音乐抽象出来,并且将音乐的抽象放入人的抽象中去,这样人听什么音乐将有客户端决定。

        下面我们在控制台程序去演示一下如何使用Bridge Pattern:

        一、 抽象类(Abstraction)

 


  1.  //抽象类(Abstraction) 
  2. abstract class People 
  3.     private Music music; 
  4.  
  5.     public Music Music 
  6.     { 
  7.         get { return music; } 
  8.         set { music = value; } 
  9.     } 
  10.  
  11.     public abstract void StartListen(); 

        二、扩充抽象类(RefinedAbstraction)

 


  1. // 扩充抽象类(RefinedAbstraction) 
  2.  class YoungPeople : People 
  3.  { 
  4.      public override void StartListen() 
  5.      { 
  6.          Console.Write("年轻人在听"); 
  7.          Music.Play(); 
  8.      } 
  9.  } 
  10.  // 扩充抽象类(RefinedAbstraction) 
  11.  class OldPeople : People 
  12.  { 
  13.      public override void StartListen() 
  14.      { 
  15.          Console.Write("老年人在听"); 
  16.          Music.Play(); 
  17.      } 
  18.  } 

        三、实现类接口(Implementor)

 


  1. // 实现类接口(Implementor) 
  2. abstract class Music 
  3.     public abstract void Play(); 

        四、具体实现类(ConcreteImplementor) 

 


  1. // 具体实现类(ConcreteImplementor)  
  2. class RockMusic : Music 
  3.     public override void Play() 
  4.     { 
  5.         Console.WriteLine("摇滚歌曲"); 
  6.     } 
  7. // 具体实现类(ConcreteImplementor)  
  8. class CountryMusic : Music 
  9.     public override void Play() 
  10.     { 
  11.         Console.WriteLine("乡村歌曲"); 
  12.     } 

        五、客户端(Client)

 


  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         //客户端实现。 
  5.         People youngPeople = new YoungPeople(); 
  6.  
  7.         youngPeople.Music = new RockMusic(); 
  8.         youngPeople.StartListen(); 
  9.  
  10.         youngPeople.Music = new CountryMusic(); 
  11.         youngPeople.StartListen(); 
  12.         Console.WriteLine("------------------"); 
  13.  
  14.         People oldPeople = new OldPeople(); 
  15.         oldPeople.Music = new CountryMusic(); 
  16.         oldPeople.StartListen(); 
  17.  
  18.         Console.ReadLine(); 
  19.     } 

        如需源码请点击 BridgePattern.rar  下载。


本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/826976