天天看点

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

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

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

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

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

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

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

 类图:

<a target="_blank" href="http://blog.51cto.com/attachment/201204/161122281.jpg"></a>

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

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

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

        一、 抽象类(Abstraction)

 //抽象类(Abstraction) 

abstract class People 

    private Music music; 

    public Music Music 

    { 

        get { return music; } 

        set { music = value; } 

    } 

    public abstract void StartListen(); 

        二、扩充抽象类(RefinedAbstraction)

// 扩充抽象类(RefinedAbstraction) 

 class YoungPeople : People 

 { 

     public override void StartListen() 

     { 

         Console.Write("年轻人在听"); 

         Music.Play(); 

     } 

 } 

 // 扩充抽象类(RefinedAbstraction) 

 class OldPeople : People 

         Console.Write("老年人在听"); 

        三、实现类接口(Implementor)

// 实现类接口(Implementor) 

abstract class Music 

    public abstract void Play(); 

        四、具体实现类(ConcreteImplementor) 

// 具体实现类(ConcreteImplementor)  

class RockMusic : Music 

    public override void Play() 

        Console.WriteLine("摇滚歌曲"); 

class CountryMusic : Music 

        Console.WriteLine("乡村歌曲"); 

        五、客户端(Client)

class Program 

    static void Main(string[] args) 

        //客户端实现。 

        People youngPeople = new YoungPeople(); 

        youngPeople.Music = new RockMusic(); 

        youngPeople.StartListen(); 

        youngPeople.Music = new CountryMusic(); 

        Console.WriteLine("------------------"); 

        People oldPeople = new OldPeople(); 

        oldPeople.Music = new CountryMusic(); 

        oldPeople.StartListen(); 

        Console.ReadLine(); 

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

继续阅读