桥接模式
using System;namespace Bridge{//抽象水果类public abstract class Fruit{public abstract void Plant();//抽象种植方法}//苹果类public class Apple : Fruit{//种植苹果public override void Plant(){Console.WriteLine(\"种植苹果!\");}}//橘子类public class Orange : Fruit{//种植苹果public override void Plant(){Console.WriteLine(\"种植橘子!\");}}//抽象果园类public abstract class Orchard{protected Fruit fruit;//水果类的引用//将具体的水果实例赋值给抽象水果类引用public Fruit Fruit { set { fruit = value; } }public abstract void Plant();}//北京果园public class BJOrchard : Orchard{//北京果园种植水果public override void Plant(){Console.WriteLine(\"北京果园!\");fruit.Plant();}}//上海果园public class SHOrchard : Orchard{//上海果园种植水果public override void Plant(){Console.WriteLine(\"上海果园!\");fruit.Plant();}}class Program{static void Main(string[] args){Orchard bjOrchard = new BJOrchard();//创建北京果园实例bjOrchard.Fruit = new Apple();//创建苹果实例bjOrchard.Plant();//种植北京果园苹果bjOrchard.Fruit = new Orange();//创建橘子实例bjOrchard.Plant();//种植北京果园橘子Orchard shOrchard = new SHOrchard();//创建北京果园实例shOrchard.Fruit = new Apple();//创建苹果实例shOrchard.Plant();//种植北京果园苹果shOrchard.Fruit = new Orange();//创建橘子实例shOrchard.Plant();//种植北京果园橘子Console.ReadKey();}}}
代码解析:
本实例代码实现了桥接模式,首先创建了抽象水果类Fruit及其派生类Apple和Orange,然后创建了抽象果园类Orchard及其派生类北京果园类BJOrchardt和上海果园类SHOrchard, Orchard类中保存了Fruit对象的引用,Fruit的引用决定了Orchard类的Plant方法调用结果,这样Orchard类并不依赖具体的Fruit类的派生类,而是依赖于抽象。实现了Fruit类的具体实现与抽象间的分离。这就是桥接模式。
说明:
桥接模式主要实现了抽象与类的实现部分的分离,它主要用于系统可以从多个角度进行分类,此时将各种分类独立出来,降低了分类之间的耦合。