设计模式之 桥接模式

  • 概述
  • 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();
          }
      }
      
  1. 总结

    1. 桥接方式比继承的方式要更灵活,它是汽车与配件可以独立各自的发展
    2. 当继承造成大量类增加且不能满足开闭原则时,可以考虑使用桥接模式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • class Program { static void Main(string[] args) { ...
    穿AJ的火烈鸟阅读 493评论 2 1
  • 分离抽象和实现: 模拟场景—— 中杯,大杯,咖啡加奶,咖啡不加奶。其中,中杯和大杯为抽象,加奶和不加奶为行为: c...
    指间_璇律阅读 448评论 0 1
  • 一、什么是桥接模式 桥接模式,将抽象部分与实现部分分离,使它们都可以独立地变化。 二、UML 图 三、代码示例 1...
    守住阳光阅读 1,357评论 0 0
  • 桥接模式:将抽象的部分与它的实现部分分离,使它们都可以独立地变化。 什么叫抽像与实现分离,并不是说让抽象类与其派生...
    超级大鸡腿阅读 403评论 0 0
  • 转:http://www.runoob.com/design-pattern/bridge-pattern.htm...
    right_33cb阅读 133评论 0 0

友情链接更多精彩内容