桥接模式
[ 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();
}
}