参考地址:http://www.jasongj.com/design_pattern/bridge/

实现系统可从多种维度分类,桥接模式将各维度抽象出来,各维度独立变化,之后可通过聚合,将各维度组合起来,减少了各维度间的耦合。

代码示例:

1、创建一个车的抽象类(车可以按照牌子分类--BMW,BenZ,Land Rover等,也可以按照变数器分类--手动档、自动档、手自一体)

  1. /**
  2. * author:YZH
  3. * time: 2019/6/11 14:27
  4. * description: 创建抽象类车,并将车的变速器设置为车的一个属性
  5. **/
  6. public abstract class Car {
  7. protected Transmission transmission;
  8.  
  9. protected abstract void run();
  10.  
  11. public void setTransmission(Transmission transmission){
  12. this.transmission = transmission;
  13. }
  14. }

2、创建变速器接口

  1. /**
  2. * author:YZH
  3. * time: 2019/6/11 14:28
  4. * description: 创建抽象类的车的变速器
  5. **/
  6. public interface Transmission {
  7.  
  8. void gear();
  9. }

3、创建BMW牌的车(继承Car)

  1. /**
  2. * author:YZH
  3. * time: 2019/6/11 14:39
  4. * description: BMWCar
  5. **/
  6. public class BMWCar extends Car{
  7. @Override
  8. protected void run() {
  9. transmission.gear();
  10. System.out.println("BMW is running");
  11. }
  12. }

4、创建手动挡(实现Transmission )

  1. /**
  2. * author:YZH
  3. * time: 2019/6/11 14:41
  4. * description: 手动挡
  5. **/
  6. public class ManualTransmission implements Transmission {
  7. @Override
  8. public void gear() {
  9. System.out.println("Manual transmission");
  10. }
  11. }

5、代码调用

  1. /**
  2. * author:YZH
  3. * time: 2019/6/11 14:42
  4. * description: 测试代码
  5. **/
  6. public class BridgeClient {
  7. public static void main(String[] args) {
  8. Transmission transmission = new ManualTransmission();
  9. Car bwmCar = new BMWCar();
  10. bwmCar.setTransmission(transmission);
  11.  
  12. bwmCar.run();
  13. }
  14. }

6、输出结果

  1. Manual transmission
  2. BMW is running

提示:如果还要创建不同品牌的车,并指定不同的变速器,只需要继承Car,新增变速器类型(实现Transmission )即可。

java23种设计模式(四)-- 桥接模式的更多相关文章

  1. java23种设计模式——四、原型模式

    源码在我的github和gitee中获取 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式- ...

  2. 二十四种设计模式:桥接模式(Bridge Pattern)

    桥接模式(Bridge Pattern) 介绍将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象 ...

  3. JAVA开发的23种设计模式之 --- 桥接模式

    桥接模式 概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.    应用场景        实现系统可能有多 ...

  4. 【Unity3D与23种设计模式】桥接模式(Bridge)

    GoF定义: "将抽象与实现分离,使二者可以独立的变化" 游戏中,经常有这么一种情况 基类角色类(ICharacter),下面有子类士兵类(ISoldier).敌军类(IEnemy ...

  5. 23种设计模式之桥接模式(Bridge)

    桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式.桥接模式类似于多重继承方案,但是 ...

  6. java23种设计模式之四:建造者模式

    在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成.例如:在新招收一个员工时,对个人信息对象的创建,在不同的阶段,需要个人信息的内容也不一样,姓名.性别.年龄 ...

  7. Java--23种设计模式之decorator模式

    装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性.动态给一个对象增加功能,这些功能可以再动态的撤消.增加由一些基本功能的排列组合而产生的非常大量的 ...

  8. java23种设计模式之一: 策略模式

    由于最近在研究学习设计模式,我会用自己的理解方式来表述对设计模式的学习和认识,通过最常用.好记的案例来记住和使用设计模式,希望对设计代码方面有所提高和改进. 一.应用背景     在软件开发中常常遇到 ...

  9. java23种设计模式之: 策略模式,观察者模式

    策略模式  --老司机开车,但是他今天想到路虎,明天想开奔驰...针对他不同的需求,来产生不同的应对策略    策略类是一个接口,定义了一个大概的方法,而实现具体的策略则是由实现类完成的,这样的目的是 ...

  10. java23种设计模式之一: 代理模式(动态代理)

    在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...

随机推荐

  1. Dubbo学习-1-基础知识

    分布式基础理论 1.什么是分布式系统: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统.分布式系统是建立在网络之上的软件系统 随着互联网发展,网站应用规模的不断扩大,常规的 ...

  2. php上传文件的原理

    文件上传原理 将客户端的文件上传到服务器,再将服务器的临时文件上传到指定目录 客户端配置 提交表单 表单的发送方式为post 添加enctype="multipart/form-data&q ...

  3. Web上传文件的三种解决方案

    第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname =  ...

  4. No module named 'requests'---问题解决记录

    今天在用Pycharm执行脚本时,报错.如下: 问题排查: 1,检查是否安装了requests cmd输入命令:pip install requests 提示有新版本可以升级,那 我就升级了. 然后输 ...

  5. Queue1循环队列

    循环队列 1 #include<iostream> using namespace std; //#define maxSize 20 template <class T> c ...

  6. 修改linux文件的mtime

    一.  Linux 文件个时间信息 所有Unix 文件系统中的文件或文件夹有三个时间戳,分别为atime.ctime和mtime. atime 表示最后一次访问(仅仅访问,没有改动)文件的时间: mt ...

  7. c++函数overload 的歧义匹配

    https://www.zhihu.com/question/20200615 函数重载选择最佳匹配函数涉及到类型转换,默认参数 注意:没有int f(int,int)版本,编译器认为上面两个函数都是 ...

  8. 获取jQuery DataTables 的checked选中行

    $(function () { var  tabel = $('#userlist').DataTable({        destroy: true, //Cannot reinitialise ...

  9. servlet反射、生命周期、接口

    什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l  ...

  10. vue基础介绍及使用

    1.vue基本使用 vm:el / data v:v-model / {{ }} 1. 引入Vue.js 2. 创建Vue对象 el : 指定根element(选择器) data : 初始化数据(页面 ...