首页 > 代码库 > 桥接模式

桥接模式

桥接模式:将抽象部分和它的实现部分分离,使它都可以独立的变化

桥接模式的定义还是不好理解,我的理解是实现系统可能有多角度分类,每一种分类都有可能变化,你们就把这种对角度分离出来让他们独立变化,减少他们之间的耦合,也就说,在发现我们需要对角度去分类实现对象,而只用继承会造成大量的类的增加,不能满足开放-封闭原则时,可以考虑,优先运用对象的合成/聚合,保持每个类被封装,并被集中到任务中,这样类和类继承层次会保持较小的规模,并且不太可能增加到不可控制的庞然大物

例如:手机可以按照手机品牌和手机软件分类,如果不按照合成/聚合原则,每次增加手机品牌或手机软件都会增加不必要的类,为了应对在某个方向上面的变化不会影响到其他方向的变化,就是让‘手机’既按照品牌分类,也可以按照功能分类

 

  1 class Program  2     {  3         static void Main(string[] args)  4         {  5             HandsetBrand ab;  6             ab = new HandsetBrandN();  7   8             ab.SetHandsetSoft(new HandsetGame());  9             ab.Run(); 10  11             ab.SetHandsetSoft(new HandsetAddressList()); 12             ab.Run(); 13  14             ab = new HandsetBrandM(); 15  16             ab.SetHandsetSoft(new HandsetGame()); 17             ab.Run(); 18  19             ab.SetHandsetSoft(new HandsetAddressList()); 20             ab.Run(); 21  22             Console.Read(); 23         } 24     } 25  26     //手机品牌 27     abstract class HandsetBrand 28     { 29         protected HandsetSoft soft; 30  31         //设置手机软件 32         public void SetHandsetSoft(HandsetSoft soft) 33         { 34             this.soft = soft; 35         } 36         //运行 37         public abstract void Run(); 38          39  40     } 41  42     //手机品牌N 43     class HandsetBrandN : HandsetBrand 44     { 45         public override void Run() 46         { 47             soft.Run(); 48         } 49     } 50  51     //手机品牌M 52     class HandsetBrandM : HandsetBrand 53     { 54         public override void Run() 55         { 56             soft.Run(); 57         } 58     } 59  60     //手机品牌S 61     class HandsetBrandS : HandsetBrand 62     { 63         public override void Run() 64         { 65             soft.Run(); 66         } 67     } 68  69  70     //手机软件 71     abstract class HandsetSoft 72     { 73  74         public abstract void Run(); 75     } 76  77     //手机游戏 78     class HandsetGame : HandsetSoft 79     { 80         public override void Run() 81         { 82             Console.WriteLine("运行手机游戏"); 83         } 84     } 85  86     //手机通讯录 87     class HandsetAddressList : HandsetSoft 88     { 89         public override void Run() 90         { 91             Console.WriteLine("运行手机通讯录"); 92         } 93     } 94  95     //手机MP3播放 96     class HandsetMP3 : HandsetSoft 97     { 98         public override void Run() 99         {100             Console.WriteLine("运行手机MP3播放");101         }102     }

 

桥接模式