标签:style blog color ar strong sp div c on
桥接模式:将抽象部分和它的实现部分分离,使它都可以独立的变化
桥接模式的定义还是不好理解,我的理解是实现系统可能有多角度分类,每一种分类都有可能变化,你们就把这种对角度分离出来让他们独立变化,减少他们之间的耦合,也就说,在发现我们需要对角度去分类实现对象,而只用继承会造成大量的类的增加,不能满足开放-封闭原则时,可以考虑,优先运用对象的合成/聚合,保持每个类被封装,并被集中到任务中,这样类和类继承层次会保持较小的规模,并且不太可能增加到不可控制的庞然大物
例如:手机可以按照手机品牌和手机软件分类,如果不按照合成/聚合原则,每次增加手机品牌或手机软件都会增加不必要的类,为了应对在某个方向上面的变化不会影响到其他方向的变化,就是让‘手机’既按照品牌分类,也可以按照功能分类
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 }
标签:style blog color ar strong sp div c on
原文地址:http://www.cnblogs.com/raohuagang/p/4004352.html