定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
桥接模式包含如下角色:
Abstraction(抽象类):定义抽象的接口,它持有实现部分的引用,并通过这个引用调用具体实现。
RefinedAbstraction(扩充抽象类):提供更具体的逻辑。
Implementor(实现类接口):定义实现类的接口,提供基本操作,但不与抽象部分的业务逻辑相关。
ConcreteImplementor(具体实现类):实现实现者接口并定义它的具体实现。
举例
生成不同颜色的不同形状
- 抽象类
public abstract class Shape
{
//聚合新业务
private IColor color;//构造器中初始话
public Shape(IColor color)
{
this.color = color;
}//原有业务(抽象方法)
public abstract void SetShape();
}
- 扩充抽象类(多个)
//生成圆形
public class Circle:Shape
{
public Circle(IColor color) : base(color)
{
//原有业务的方法
SetShape();
//其他业务的方法
color.SetColor();
}public override void SetShape()
{
Console.WriteLine("设置为圆形");
}
}//生成正方形
public class Square : Shape
{
public Square(IColor color) : base(color)
{
SetShape();
color.SetColor();
}public override void SetShape()
{
Console.WriteLine("设置为正方形");
}
}
- 实现类接口
public interface IColor
{
//声明该业务的方法
void SetColor();
}
- 具体实现类(多个)
//生成红色
public class Red : IColor
{
public void SetColor()
{
Console.WriteLine("设置颜色为红色");
}
}//生成蓝色
public class Bule : IColor
{
public void SetColor()
{
Console.WriteLine("设置颜色为蓝色");
}
}
- 客户类
class Program
{
static void Main(string[] args)
{
//生成红色圆形
Shape shape1 = new Circle(new Red());
//生成蓝色正方形
Shape shape2 = new Square(new Bule());
}
}
总结:抽象类声明初始业务的方法,并聚合其他业务(实现类接口),在构造函数中初始化;
抽象扩充类中,可调用自身业务的方法和构造函数中传入的其他业务的方法;实现类接口中,声明其他业务的方法,并在具体实现类中实现;客户在实例化对象时需传入其他业务的对象(具体实现类)。