java设计模式之桥接模式(Bridge)

 更新时间:2017年01月02日 14:53:23   作者:yuminfeng728  
这篇文章主要为大家详细介绍了java设计模式之桥接模式Bridge,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

概述

桥接模式一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。
桥接模式的做法是把变化的部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

UML结构图

代码示例

package interview;

interface Implementor{

  void operationImpl();
}

abstract class Abstraction{
  protected Implementor implementor;

  public Abstraction(Implementor implementor){
    this.implementor = implementor;
  }

  public void operation(){
    implementor.operationImpl();
  }
}

class ConcreteImplementorA implements Implementor {
  @Override
  public void operationImpl() {
    System.out.println("具体实现A");
  }  
}

class ConcreteImplementorB implements Implementor {
  @Override
  public void operationImpl() {
    System.out.println("具体实现B");
  }  
}

class RefinedAbstraction extends Abstraction{

  public RefinedAbstraction(Implementor implementor) {
    super(implementor);
  }

  public void otherOperation(){
    System.out.println("其他操作");
  }
}

public class MainTest {

  public static void main(String arg[]) {
    Implementor implementor = new ConcreteImplementorA();
    RefinedAbstraction abstraction = new RefinedAbstraction(implementor);
    abstraction.operation();
    abstraction.otherOperation();
  }
}

使用场景

1.如果你不希望在抽象和实现部分采用固定的绑定关系,可以采用桥接模式,来把抽象和实现部分分开,然后在程序运行期间来动态的设置抽象部分需要用到的具体实现,还可以动态切换具体的实现。
2.如果出现抽象部分和实现部分都应该可以扩展的情况,可以采用桥接模式,让抽象部分和实现部分可以独立的变化,从而可以灵活的进行单独扩展,而不是搅在一起,扩展一边可以影响另一边。
3.如果希望实现部分的修改,不会对客户产生影响,可以采用桥接模式,客户是面向抽象的接口在运行,实现部分的修改,可以独立于抽象部分,也就不会对客户产生影响了,也可以说对客户是透明的。
4.如果采用继承的实现方案,会导致产生很多子类,对于这种情况,可以考虑采用桥接模式,分析功能变化的原因,看看是否能分离成不同的维度,然后通过桥接模式来分离他们,从而减少子类的数目。

如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。
抽象化角色和具体化角色都应该可以被子类扩展。在这种情况下,桥接模式可以灵活地组合不同的抽象化角色和具体化角色,并独立化地扩展。
设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringCloud微服务中跨域配置的方法详解

    SpringCloud微服务中跨域配置的方法详解

    在使用SpringCloud实现微服务时,经常会碰到前端页面访问多个二级域名的情况,跨域是首先要解决的问题。解决这个问题,可以从两方面入手,一种方案是在微服务各自的业务模块中实现,即在SpringBoot层实现,另外一种方案就是在Gateway层实现
    2023-02-02
  • Java Lambda表达式与引用类浅析

    Java Lambda表达式与引用类浅析

    Lambda表达式是Java SE8中一个重要的新特性,允许通过表达式来代替功能接口。本文将通过一些简单的示例和大家讲讲Lamda表达式的使用,感兴趣的可以了解一下
    2023-01-01
  • 在SpringBoot项目中获取Request的四种方法

    在SpringBoot项目中获取Request的四种方法

    这篇文章主要为大家详细介绍了SpringBoot项目中获取Request的四种方法,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以学习一下
    2023-11-11
  • Java 事务注解@Transactional回滚(try catch、嵌套)问题

    Java 事务注解@Transactional回滚(try catch、嵌套)问题

    这篇文章主要介绍了Java @Transactional回滚(try catch、嵌套)问题,Spring 事务注解 @Transactional 本来可以保证原子性,如果事务内有报错的话,整个事务可以保证回滚,但是加上try catch或者事务嵌套,可能会导致事务回滚失败
    2022-08-08
  • Spring Boot中使用Spring-Retry重试框架的实现

    Spring Boot中使用Spring-Retry重试框架的实现

    本文主要介绍了Spring Boot中使用Spring-Retry重试框架的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • SpringBoot响应处理实现流程详解

    SpringBoot响应处理实现流程详解

    这篇文章主要介绍了SpringBoot响应处理实现流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • Spring动态管理定时任务之ThreadPoolTaskScheduler解读

    Spring动态管理定时任务之ThreadPoolTaskScheduler解读

    这篇文章主要介绍了Spring动态管理定时任务之ThreadPoolTaskScheduler解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 解决IDEA上循环依赖报错问题Error:java: Annotation processing is not supported for module cycles

    解决IDEA上循环依赖报错问题Error:java: Annotation processing&n

    这篇文章主要介绍了解决IDEA上循环依赖报错问题Error:java: Annotation processing is not supported for module cycles,具有很好的参考价值,希望对大家有所帮助
    2023-10-10
  • Spring mvc JSON数据交换格式原理解析

    Spring mvc JSON数据交换格式原理解析

    这篇文章主要介绍了Spring mvc JSON数据交换格式原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java中Volatile关键字详解及代码示例

    Java中Volatile关键字详解及代码示例

    这篇文章主要介绍了Java中Volatile关键字详解及代码示例,分为两个部分,第一部分介绍了Volatile关键字的基本概念等内容,第二部分分享了实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11

最新评论