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

    • 概述
    • 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. 当继承造成大量类增加且不能满足开闭原则时,可以考虑使用桥接模式
  • 相关阅读:
    重建二叉树POJ2255
    MPI Maelstrom(East Central North America 1996)(poj1502)
    POJ1944 Fiber Communications (USACO 2002 February)
    目标检测 -- R-CNN,Fast R-CNN,Faster R-CNN
    灰度标签图显示查看,加颜色显示
    好的github链接
    训练识别 数据增强方法
    caffe 源码随便记录
    经典网络和问题
    error: ‘path_wts’ does not name a type
  • 原文地址:https://www.cnblogs.com/tanoak/p/10503886.html
Copyright © 2011-2022 走看看