四个角色:抽象类(Abstraction)、扩充抽象类(RefinedAbstraction)、实现类接口(Implementor)、具体实现类(ConcreteImplementor)
抽象类(Abstraction):主控类,内部有一个实现类接口(Implementor)的对象可调用。
扩充抽象类(RefinedAbstraction):扩充抽象类,个性定制自身行为和属性继承于Abstraction。
实现类接口(Implementor):被操作类。
具体实现类(ConcreteImplementor) :继承并实现Implementor。
实现思路:多个扩充抽象类继承于Abstraction主控类,并且操作其内部的Implementor的行为。以此达到控制多种具体实现类的目的。这是一个多对多的关系。
类图:
应用场景:人听音乐,人有很多种人(年轻人、老年人、中年人、小孩子等),音乐有很多种(摇滚音乐、乡村音乐、爵士音乐、流行音乐等)。
分析:不同的人可以听不同种类的音乐,人的种类是会变化的,音乐的种类也是活动可变的,在这里将人和音乐抽象出来,并且将音乐的抽象放入人的抽象中去,这样人听什么音乐将有客户端决定。
下面我们在控制台程序去演示一下如何使用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
- {
- public override void StartListen()
- {
- Console.Write("老年人在听");
- Music.Play();
- }
- }
三、实现类接口(Implementor)
- // 实现类接口(Implementor)
- abstract class Music
- {
- public abstract void Play();
- }
四、具体实现类(ConcreteImplementor)
- // 具体实现类(ConcreteImplementor)
- class RockMusic : Music
- {
- public override void Play()
- {
- Console.WriteLine("摇滚歌曲");
- }
- }
- // 具体实现类(ConcreteImplementor)
- class CountryMusic : Music
- {
- public override void Play()
- {
- Console.WriteLine("乡村歌曲");
- }
- }
五、客户端(Client)
- class Program
- {
- static void Main(string[] args)
- {
- //客户端实现。
- People youngPeople = new YoungPeople();
- youngPeople.Music = new RockMusic();
- youngPeople.StartListen();
- youngPeople.Music = new CountryMusic();
- youngPeople.StartListen();
- Console.WriteLine("------------------");
- People oldPeople = new OldPeople();
- oldPeople.Music = new CountryMusic();
- oldPeople.StartListen();
- Console.ReadLine();
- }
- }
如需源码请点击 BridgePattern.rar 下载。
本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/826976