桥接模式

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

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

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

  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     }
原文地址:https://www.cnblogs.com/raohuagang/p/4004352.html