桥接模式(Bridge)定义:将抽象部分与它的显示部分分离,使它们都可以独立地变化。
桥接模式的目的是松耦合,另外也用到了合成/聚合复用原则(尽量使用合成/聚合,尽量不要使用继承)。因为继承是一种强耦合关系,所以我们优先考虑把类分好,然后找到类之间的合成/聚合关系,到最后再使用继承。
Implementor类:
abstract class Implementor
{
public abstract void Operation();//抽象方法Operation()
}
子类:
class ConcreteImplementorA:Implementor
{
public override void Operation()//重写
{
Console.WriteLine("具体实现A的方法执行");
}
}
class ConcreteImplementorB : Implementor
{
public override void Operation()//重写
{
Console.WriteLine("具体实现B的方法执行");
}
}
Abstraction类:
class Abstraction
{
protected Implementor implementor;//实例化父类
public void SetImplementor(Implementor implementor)//Implementor类作为Abstraction类的方法参数
{
this.implementor = implementor;
}
public virtual void Operation()//虚方法
{
implementor.Operation();
}
}
RefinedAbstraction类
class RefinedAbstraction:Abstraction
{
public override void Operation()//重写
{
implementor .Operation();
}
}
客户端:
static void Main(string[] args)
{
Abstraction ab = new RefinedAbstraction();//父类的实现指向子类的实例
//实例化ConcreteImplementorA类的对象,通过方法SetImplementor()把值给Implementor类实例化的对象implementor
ab.SetImplementor(new ConcreteImplementorA ());//这里也是里式转换
ab.Operation();//执行Implementor类的对象implementor的方法Operation(),实际是执行ConcreteImplementorA类的方法Operation(),显示“实现具体的方法A”
ab.SetImplementor(new ConcreteImplementorB());//同样操作
ab.Operation();
Console.Read();
}
}