前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >桥接模式

桥接模式

作者头像
tanoak
发布2019-03-15 14:25:25
1.4K0
发布2019-03-15 14:25:25
举报
文章被收录于专栏:java闲聊java闲聊
  • 概述 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  • 来个栗子 小明买了一辆法拉利,但是发现法拉利村里的人不认识,没法儿***,因此小明特地又去买了一辆宝马,这下就可以开出去不用解释这是啥车了,买回来后就开始要为爱车安装各种装饰品,它的两辆车可以任意搭配饰品,结论来了<抽象与实现分离、实现部分独立地变化>
  • UML
  • 优点:实现系统可能有多角度分类,每一种分类都有可能变化,分离并独立变化,减少它们之间的耦合
  • 栗子
代码语言:javascript
复制

 /*汽车基类*/ 
public abstract class Car {     
   /**      * 安装导航仪      * @param navigator      */     
   public abstract void installNavigator(INavigator navigator);          
   /**      * 开启导航      * 开启导航是调用导航接口实现类的方法      */     
   public abstract void open(); 
}
 /*宝马牌汽车*/ 
public class BMWCar extends Car {   
   /**导航仪*/     INavigator navigator = null;          
   @Override     public void installNavigator(INavigator n) {       
     System.out.println("宝马成功安装了:"+n.toString());         
     navigator = n;     
   }     
   @Override     public void open() {       
     navigator.work();     
   } 
 } 
 /*法拉利牌汽车*/ 
 public class FerrariCar extends Car {   
   /**导航仪*/     INavigator navigator = null;         
   @Override     public void installNavigator(INavigator n) {       
     System.out.println("法拉利成功安装了:"+n.toString());        
     navigator = n;     
  }               
  @Override     public void open() {       
    navigator.work();     
  }      
 }
 /*导航仪接口*/ 
 public interface INavigator {      
 /**      *  导航实现      */  
   void work(); 
 }
 /*高德导航仪*/ 
 public class AmapNavigator implements INavigator {  
   @Override  public void work() {      
     System.out.println("我是高德导航仪!");  
   }     
   @Override     public String toString() {       
     return "【高德导航仪】";     
   } 
  } 
   /*北斗导航仪*/ 
  public class BdNavigator implements INavigator {   
     @Override     public String toString() {       
       return "【北斗牌导航仪】";     
     }          
     @Override     public void work() {       
       System.out.println("我是北斗导航仪!");     
     } 
  }
代码语言:javascript
复制
public class Main {   
  public static void main(String[] args) {       
    test1() ;         
    test1_1() ;          
  }     
  public static void test1(){       
    INavigator bdNavigator = new BdNavigator();         //法拉利安装北斗导航         
    Car ferrariCar = new FerrariCar() ;         
    ferrariCar.installNavigator(bdNavigator);         
    ferrariCar.open();     
  }     
  public static void test1_1(){         
    INavigator amapNavigator = new AmapNavigator();         //宝马安装了高德导航仪         
    Car ghostCar = new BMWCar();         
    ghostCar.installNavigator(amapNavigator);         
    ghostCar.open();     
  } 
}
  • 总结
    1. 桥接方式比继承的方式要更灵活,它是汽车与配件可以独立各自的发展
    2. 当继承造成大量类增加且不能满足开闭原则时,可以考虑使用桥接模式
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.03.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档