一、概念
①、什么是桥接模式?
将抽象部分与它的实现部分分离,是它们都可以独立地变化。它是一种对象结构型模式,又称为柄体模式或接口模式。
用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构来实现二者的解耦。
②、主要解决什么问题?
解决在多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
③、什么时候使用?
实现系统可能有多个角度分类,每一种角度都可能变化。一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
④、如何解决?
把这种多角度分类分离出来,让它们独立变化,减少它们之间的耦合。抽象类依赖实现类。
二、图
①、结构图
②、拓展图(http://www.cnblogs.com/jobbible/p/9931198.html)
三、代码
①、案例类图
②、代码
1、聚合的代码体现
static void Main(string[] args)
{
//聚合的代码体现
HandsetBrand ab; //创建一个手机品牌类的变量ab
ab = new HandsetBrandM(); //给手机品牌变量ab赋值,赋值为手机品牌N,此段代码确定了手机品牌
ab.SetHandsetSoft(new HandsetGame()); //调取手机品牌中的获取手机软件的方法
ab.Run(); //运行手机品牌N的Run方法,运行获得的手机软件的Run方法
ab.SetHandsetSoft(new HandsetAdressList()); //获取手机软件
ab.Run(); //运行手机品牌N的获得软件的方法
}
}
public abstract class HandsetBrand
{
protected HandsetSoft soft; //手机品牌要有手机软件建立聚合联系,在手机品牌里声明一个手机软件变量,以备运行。
public void SetHandsetSoft(HandsetSoft soft) //创建一个获取软件的方法,参数(依赖)手机软件
{
this.soft = soft; //将获取的收集软件赋予给手机品牌中的手机软件变量
}
public abstract void Run(); //手机品牌抽象方法运行。
}
public abstract class HandsetSoft //创建一个抽象的手机软件类
{
public abstract void Run(); //建立一个抽象的收集软件运行方法
}
2、通过实现来拓展(实现)
class HandsetGame:HandsetSoft //具体的收集软件游戏继承了抽象的手机软件
{
public override void Run() //重写了父类的Run()方法
{
Console.WriteLine("运行手机游戏"); //在控制台上写入内容
}
}
class HandsetAdressList:HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机通讯录");
}
}
class HandsetMp3:HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机MP3");
}
}
3、通过继承来拓展(抽象)
class HandsetBrandM:HandsetBrand //建立一个具体的手机品牌M类继承抽象的收集品牌类
{
public override void Run() //重写父类的Run()方法
{
soft.Run(); //手机品牌M的run()方法是运行软件的Run()方法
}
}
class HandsetBrandN : HandsetBrand
{
public override void Run() //重写手机品牌的Run方法
{
soft.Run(); //运行获得的软件的Run方法
}
}
class HandsetBrandS:HandsetBrand
{
public override void Run()
{
soft.Run();
}
}
}
四、拓展(很棒的文章)
https://blog.csdn.net/qq_31156277/article/details/80659537
https://www.cnblogs.com/V1haoge/p/6497919.html
https://www.cnblogs.com/libingql/p/3496075.html(讲解了抽象化与实现化)
http://www.cnblogs.com/jobbible/p/9931198.html