桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
首先什么叫抽象与它的实现分离,不是说,让抽象类与其派生类分离,因为没有意义,实现指的是抽象类和它的派生类用来实现自己的对象。
下面来看一段代码:
class 桥接模式
{
static void Main(string[] args)
{
HandsetBrand ab;
ab = new HandsetBrandN();
ab.SetHandsetSoft (new HandsetGame() );
ab.Run ();
ab.SetHandsetSoft (new HandsetAddressList() );
ab.Run ();
ab=new HandsetBrandM ();
ab.SetHandsetSoft (new HandsetGame() );
ab.Run();
ab.SetHandsetSoft (new HandsetAddressList() );
ab.Run ();
Console .Read ();
}
}
abstract class HandsetSoft //手机软件类
{
public abstract void Run();
}
class HandsetGame : HandsetSoft //手机游戏类
{
public override void Run()
{
Console.WriteLine("运行手机游戏");
}
}
class HandsetAddressList : HandsetSoft //手机通讯录类
{
public override void Run()
{
Console .WriteLine ("运行手机通讯录");
}
}
abstract class HandsetBrand //手机品牌
{
protected HandsetSoft soft;
//设置手机软件
public void SetHandsetSoft(HandsetSoft soft)
{
this.soft = soft;
}
//运行
public abstract void Run();
}
class HandsetBrandN : HandsetBrand
{
public override void Run()
{
soft.Run ();
}
}
class HandsetBrandM : HandsetBrand
{
public override void Run()
{
soft.Run ();
}
}
如果增加MP3功能,只需要增加这个类就可以了:
如下面代码:
//手机MP3播放
class HandsetMP3 : HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机MP3播放");
}
}
如果增加品牌只需要增加一个子类:S品牌。
//手机品牌S
class HandsetBrandS : HandsetBrand
{
public override void Run()
{
soft.Run();
}
}
看上面的代码,想到了开放-封闭原则,这样不用修改原来的代码,只需要拓展类就可以了。
继承是一种强耦合的结构,父类变,子类就会改变。对于桥接模式,理解为实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。