在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。一个类存在两个独立变化的维度,而且两个维度都需要进行扩展的时候,可以使用桥接模式
1.不同品牌手机要安装不同的手机软件(注意:高层要引用底层,三层架构中就运用了桥接模式,BLL层中通过桥接模式与DAL解耦,其实现方式就是BLL层中添加了DAL层的引用,这样数据库底层的改变就不会影响客户端的实现了)
定义手机软件(底层)抽象类和具体软件类
/// <summary>
/// 手机软件
/// </summary>
public abstract class HandsetSoft
{
public abstract void Run();
}
/// <summary>
/// 手机游戏
/// </summary>
public class HandsetGame : HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机游戏");
}
}
/// <summary>
/// 手机通讯录
/// </summary>
public class HandsetAddressList : HandsetSoft
{
public override void Run()
{
Console.WriteLine("运行手机通讯录");
}
}
定义手机品牌(高层)抽象类和具体品牌类
/// <summary>
/// 手机品牌
/// </summary>
public abstract class HandsetBrand
{
protected HandsetSoft soft;
/// <summary>
/// 品牌需要关注软件,所以可在机子中安装软件
/// </summary>
public void SetHandsetSoft(HandsetSoft soft)
{
this.soft = soft;
}
public abstract void Run();
}
/// <summary>
/// 手机品牌M
/// </summary>
public class HandsetBrandM : HandsetBrand
{
public override void Run()
{
this.soft.Run();
}
}
/// <summary>
/// 手机品牌N
/// </summary>
public class HandsetBrandN : HandsetBrand
{
public override void Run()
{
this.soft.Run();
}
}
开启场景模拟
static void Main(string[] args)
{
HandsetBrand ab = new HandsetBrandM();
ab.SetHandsetSoft(new HandsetGame());
ab.Run();
ab.SetHandsetSoft(new HandsetAddressList());
ab.Run();
}