桥接模式

[ Bridge ]

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

桥联模式
将抽象部分与它的实现部分分离 , 使它们都可以独立的变化
实现指的是抽象类和它的派生类用来实现自己的对象。

优先使用对象组合 , 而不是继承

实现系统可能有多角度分类 , 每一种分类都有可能变化 , 那么就把这种多角度分离出来让它们独立变化 , 减少它们之间的耦合。
在发现需要多角度去分类实现对象 , 而只用继承会造成大量的类增加 , 不能满足 开放-封闭原则 时 , 就应该考虑使用 "桥联模式" 了。



源码 :

// <summary>
// 手机软件接口
// </summary>
public interface IHandsetSoft
{
  void Run();
}



class HandsetAddressList : IHandsetSoft
{
  public void Run()
  {
    Console.WriteLine("运行手机通讯录");
  }
}



public class HandsetGame : IHandsetSoft
{
  public void Run()
  {
    Console.WriteLine("运行手机游戏");
  }
}




// <summary>
// 手机品牌接口
// </summary>
public interface IHandsetBrand
{
  void SetHandsetSoft(IHandsetSoft soft);
  void Run();
}



// <summary>
// 手机品牌 N
// </summary>
public class HandsetBrandN : IHandsetBrand
{
  private IHandsetSoft soft;
  public void SetHandsetSoft(IHandsetSoft soft)
  {
    this.soft = soft;
  }

  public void Run()
  {
    this.soft.Run();
  }
}



// <summary>
// 手机品牌 M
// </summary>
public class HandsetBrandM : IHandsetBrand
{
  private IHandsetSoft soft;
  public void SetHandsetSoft(IHandsetSoft soft)
  {
    this.soft = soft;
  }

  public void Run()
  {
    soft.Run();
  }
}



class Program
{
  static void Main(string[] args)
  {
    IHandsetBrand hb = new HandsetBrandN();
    hb.SetHandsetSoft(new HandsetGame());
    hb.Run();

    hb.SetHandsetSoft(new HandsetAddressList());
    hb.Run();

    hb = new HandsetBrandM();
    hb.SetHandsetSoft(new HandsetGame());
    hb.Run();

    hb.SetHandsetSoft(new HandsetAddressList());
    hb.Run();

    Console.Read();
  }
}

posted on 2012-02-21 13:22  多个马甲  阅读(191)  评论(0编辑  收藏  举报