- Bridge Pattern
将抽象与实现解耦,是抽象与实现可以独立变化。 - 模式分析
Abstraction : 抽象类中定义了一个实现类接口类型的对象并可以维护该对象;
RefinedAbstraction : 扩充抽象类扩充由抽象类定义的接口,它实现了在抽象类中定义的抽象业务方法,在扩充抽象类中可以调用在实现类接口中定义的业务方法;
Implementor: 实现类接口定义了实现类的接口,实现类接口仅提供基本操作,而抽象类定义的接口可能会做更多更复杂的操作;
ConcreteImplementor: 具体实现类实现了实现类接口并且具体实现它,在不同的具体实现类中提供基本操作的不同实现,在程序运行时,具体实现类对象将替换其父类对象,提供给客户端具体的业务操作方法。
在桥接模式中,抽象(Abstraction)与实现(Implementation)脱耦,它们可以沿着各自的维度独立变化。
桥接模式的主要优点是分离抽象接口及其实现部分,是比多继承方案更好的解决方法.
- 代码示例
/*
* Bridge:
* 桥接模式 将抽象与实现解耦,使他们可以独立变化。
* 适用场景:类存在两个独立变化的维度。
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Pattern02
{
class Program
{
static void Main(string[] args)
{
//桥接模式 将抽象与实现解耦,使他们彼此独立变化。
Abstraction ab = new RefinedAbstraction();
// Set implementation and call
ab.Implementor = new ConcreteImplementorA();
ab.Operation();
// Change implemention and call
ab.Implementor = new ConcreteImplementorB();
ab.Operation();
Console.ReadLine();
}
}
/// <summary>
/// 抽象类中定义了一个实现类接口类型的对象并可以维护该对象;
/// </summary>
class Abstraction
{
protected Implementor implementor;
public Implementor Implementor
{
set { implementor = value; }
}
public virtual void Operation()
{
implementor.Operation();
}
}
/// <summary>
/// 实现类接口定义了实现类的接口,实现类接口仅提供基本操作,而抽象类定义的接口可能会做更多更复杂的操作;
/// </summary>
abstract class Implementor
{
public abstract void Operation();
}
/// <summary>
/// 扩充抽象类扩充由抽象类定义的接口,它实现了在抽象类中定义的抽象业务方法,
/// 在扩充抽象类中可以调用在实现类接口中定义的业务方法;
/// </summary>
class RefinedAbstraction : Abstraction
{
public override void Operation()
{
implementor.Operation();
}
}
class ConcreteImplementorA : Implementor
{
public override void Operation()
{
Console.WriteLine("ConcreteImplementorA operation");
}
}
/// <summary>
/// 具体实现类实现了实现类接口并且具体实现它,在不同的具体实现类中提供基本操作的不同实现,
/// 在程序运行时,具体实现类对象将替换其父类对象,提供给客户端具体的业务操作方法。
/// </summary>
class ConcreteImplementorB : Implementor
{
public override void Operation()
{
Console.WriteLine("ConcreteImplementB Operation");
}
}
}