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