1、概述:

  当我们遇到要描述一个类,需要从不同角度来描述的时候,这时候,桥接模式就用到了,比如说,手机这个类,我们可以按品牌来描述,分为三星和苹果等,我们也可以按功能来描述,比如拍照功能、视频播放功能等,如果我们设计的时候,把所有描述都继承自手机类,这样就会出现继承很多层次的现象,这是需要把具体手机的实现和抽象分离开来,就是说,手机分为三星和苹果的,而功能单独抽象出来,因为三星和苹果都具有拍照、视频播放等功能。

2、组合/聚合复用原则:

  尽量使用组合/聚合关系,尽量不要使用继承关系。

3、桥接模式定义:

  将抽象部分与它的实现分离,使它们都可以独立的变化。

  就像刚才说手机这个例子,手机除了苹果和三星的,还有HTC等,手机功能除了拍照和视频播放,还有MP3,上网等功能,我们把手机单独抽象出来,然后,手机功能单纯抽象出来,然后手机再聚合手机功能类,达到相互独立而又有联系的设计。

4、UML类图:

5、示例代码:

  我们以手机为例,举例如下:

  手机功能抽象类:

  abstract class PhoneFunction

  {

    public abstract void Run();//具体运行哪个功能

  }

  拍照功能类:

  class Photo:PhoneFunction

  {

    public override void Run()

    {

      //运行拍照功能

    }

  }

  视频播放类:

  class Movie:PhoneFunction

  {

    public override void Run()

    {

      //运行视频播放功能

    }

  }

  手机抽象类:

  abstract class Phone

  {

    public PhoneFunction function;

    public void SetFunction(PhoneFunction function)

    {

      this.function=function;

    }

    public abstract void Run();

  }

  三星手机类:

  class Sunsang:Phone

  {

    public override void Run()

    {

      function.Run();

    }

  }

  苹果手机类:

  class IPhone:Phone

  {

    public override void Run()

    {

      function.Run();

    }

  }

客户端调用:

Phone sunsang=new Sunsang();

sunsang.SetFunction(new Movie());

sunsang.Run();

 

 

posted on 2013-08-19 21:53  Kelly_HanShuai  阅读(86)  评论(0)    收藏  举报