• 桥接模式


    • 概述
    • UML类图
    • 代码栗子
    • 总结
    1. 概述

      桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。
      

      • 来个栗子
        小明买了一辆法拉利,但是发现法拉利村里的人不认识,没法儿***,因此小明特地又去买了一辆宝马,这下就可以开出去不用解释这是啥车了,买回来后就开始要为爱车安装各种装饰品,它的两辆车可以任意搭配饰品,结论来了<抽象与实现分离、实现部分独立地变化>
      1. UML

        • 优点:实现系统可能有多角度分类,每一种分类都有可能变化,分离并独立变化,减少它们之间的耦合
    2. 栗子

      /*汽车基类*/
      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("我是北斗导航仪!");
          }
      }
      
      • 测试

        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();
            }
        }
        
    3. 总结

      1. 桥接方式比继承的方式要更灵活,它是汽车与配件可以独立各自的发展
      2. 当继承造成大量类增加且不能满足开闭原则时,可以考虑使用桥接模式
  • 相关阅读:
    【AI模型测试】语音转文字ASR的测试评价:HTK在windows下的配置说明
    【AI模型测试】语音识别ASR的结果校对
    【AI模型测试】ASR语音转文字的供应商对比测试
    【Python自学】python 引用import文件夹下的py文件的方法(转)
    【AI模型测试】语音转文字ASR测试的测试点和用例设计等
    【AI模型测试】语音转文字ASR的测试方法学习
    【AI模型测试】ffmpeg 基本用法(转)
    【AI模型测试】使用Python实现语音文件的特征提取
    【AI模型测试自学】FFmpeg的安装和配置等,为视频转语音准备
    【AI模型测试】ASR的测试知识积累
  • 原文地址:https://www.cnblogs.com/tanoak/p/10503886.html
Copyright © 2020-2023  润新知