设计模式:
桥接模式(Bridge Pattern)
简单介绍:
桥接模式(Bridge Pattern):桥接模式的用意是将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
生活实例:比如我们平常接触到的手机系统与软件的关系,每当有新的软件,他们会不断的支持各类系统(当然只是举例子,有的不一定一开始发布就把多个平台都支持了)
手机系统:ios,Android……
手机软件:微信,网易云音乐……
桥接模式组成:
桥接模式的结构包括Abstraction、RefinedAbstraction、Implementor、ConcreteImplementor四个部分,其中:
Abstraction:定义抽象类的接口,它维护了一个指向Implementor类型对象的指针。
RefinedAbstraction:扩充由Abstraction定义的接口;
Implementor:定义实现类的接口,该接口不一定要与Abstraction的接口完全一致,事实上两个接口可以完全不同。一般情况,Implementor接口仅为提供基本操作,而 Abstraction则定义了基于基本操作的较高层次操作。
ConcreteImplementor实现Implementor接口并定义它的具体实现。
在桥接模式中,两个类Abstraction和Implementor分别定义了抽象与行为类型的接口,通过调用两接口的子类实现抽象与行为的动态组合。
生活实例:Abstraction ---》SystemPlatform(系统平台接口)
RefinedAbstraction---》ios系统平台合Android系统平台
Implementor----》ISoftWare软件接口
ConcreteImplementor---》微信和网易云音乐
桥接模式类图:
桥接模式C#代码举例
ISoftware类:软件接口类
/// <summary>
/// 软件接口类
/// </summary>
public interface ISoftWare
{
void Start();
}
WeiChart:微信软件类
/// <summary>
/// 微信软件类
/// </summary>
public class WeiChart:ISoftWare
{
public void Start()
{
Console.WriteLine("微信已运行!");
}
}
WanyiMusic:网易云音乐类
/// <summary>
/// 音乐软件类
/// </summary>
public class WangyiMusic:ISoftWare
{
public void Start()
{
Console.WriteLine("网易云音乐已运行!");
}
}
SystemPlatform类:系统平台抽象类
/// <summary>
/// 运行系统平台抽象接口类
/// </summary>
public abstract class SystemPlatform
{
public abstract void Run(ISoftWare software);
}
IosSys:ios系统类
/// <summary>
/// ios操作系统平台
/// </summary>
public class IosSys:SystemPlatform
{
public override void Run(ISoftWare software)
{
Console.WriteLine("IOS系统欢迎您");
software.Start();
}
}
AndroidSys:Android系统类
/// <summary>
/// Android系统类实现
/// </summary>
public class AndroidSys:SystemPlatform
{
public override void Run(ISoftWare software)
{
Console.WriteLine("欢迎来到Android系统");
software.Start();
}
}
用户测试类:
/// <summary>
/// 用户测试类
/// </summary>
class Client
{
static void Main(string[] args)
{
//创建软件对象
WeiChart weichart = new WeiChart();
WangyiMusic wangyiMusic = new WangyiMusic();
Console.WriteLine("-----------IOS-----------");
//ios系统运行软件
IosSys iosSys = new IosSys();
iosSys.Run(weichart);
iosSys.Run(wangyiMusic);
Console.WriteLine("---------Android---------");
//android系统运行软件
AndroidSys androidSys = new AndroidSys();
androidSys.Run(weichart);
androidSys.Run(wangyiMusic);
Console.Read();
}
}
运行结果: