zoukankan      html  css  js  c++  java
  • 桥接模式

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

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

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

      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     }
  • 相关阅读:
    【转】医院信息系统基本功能规范---门急诊划价收费分系统功能规范
    elementUI的table表头与内容错位的解决方案
    小程序按钮设置宽度无效的解决方案
    小程序scroll-view的bindscroll在真机上不触发的解决方案?
    小程序怎么设置input框和键盘的距离
    小程序动态获取元素高度报错VM14689:1 thirdScriptError Cannot read property 'height' of null;at SelectorQuery callback function TypeError: Cannot read property 'height' of null
    mpvue使用px与设计稿的转化
    SpringBoot中前后端数据交互
    Java并发-BlockingQueue
    Java并发-Fork/Join框架
  • 原文地址:https://www.cnblogs.com/raohuagang/p/4004352.html
Copyright © 2011-2022 走看看