我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java结构型设计模式之桥接模式详细讲解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java结构型设计模式之桥接模式详细讲解

桥接模式

概述

桥接模式(Bridge Pattern)也称为桥梁模式、接口(Interfce)模式或柄体(Handle and Body)模式,属于结构型模式。

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

桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。桥接模式的核心在于解耦抽象和实现。

应用场景

当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构隐定。

适用业务场景:

1.在抽象和具体实现之间需要增加更多的灵活性的场景。

2.一个类存在两个(或多个)独立变化的维度,而这两个(或多个)维度都需要独立进行扩展。

3.不希望使用继承,或因为多层继承导致系统类的个数剧增。

优缺点

优点:

1.分离抽象部分及其具体实现部分

2.提高了系统的扩展性

3.实现细节对客户透明

缺点:

1.增加了系统的理解与设计难度

2.需要正确地识别系统中两个独立变化的维度

主要角色

1.抽象(Abstraction)

该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象)。

2.修正抽象(RefinedAbstraction)

抽象的具体实现,对抽象的方法进行完善和扩展。

3.实现(Implementor)

确定实现维度的基本操作,提供给抽象使用。该类一般为接口或抽象类。

1.具体实现(Concretelmplementor)

实现的具体实现。

桥接模式的基本使用

创建实现角色

public interface IImplementor {
    void operationImpl();
}

创建具体实现角色

public class ConcreteImplementorA implements IImplementor {
    public void operationImpl() {
        System.out.println("ConcreteImplementorA operationImpl");
    }
}
public class ConcreteImplementorB implements IImplementor {
    public void operationImpl() {
        System.out.println("ConcreteImplementorB operationImpl");
    }
}

创建抽象角色

public abstract class Abstraction {
    protected IImplementor mImplementor;
    public Abstraction(IImplementor implementor) {
        this.mImplementor = implementor;
    }
    public void operation() {
        this.mImplementor.operationImpl();
    }
}

创建修正抽象角色

public class RefinedAbstraction extends Abstraction {
    public RefinedAbstraction(IImplementor implementor) {
        super(implementor);
    }
    @Override
    public void operation() {
        super.operation();
        System.out.println("RefinedAbstraction operation");
    }
}

客户端调用

    public static void main(String[] args) {
        // 来一个实现化角色
        IImplementor impA = new ConcreteImplementorA();
        IImplementor impB = new ConcreteImplementorB();
        // 来一个抽象化角色,聚合实现
        Abstraction absA = new RefinedAbstraction(impA);
        Abstraction absB = new RefinedAbstraction(impB);
        // 执行操作
        absA.operation();
        absB.operation();
    }

ConcreteImplementorA operationImpl
RefinedAbstraction operation
ConcreteImplementorB operationImpl
RefinedAbstraction operation

桥接模式实现消息发送

使用桥接模式解耦消息类型与消息重要程度。

创建实现角色

创建实现角色,担任桥接角色,实现消息发送的统一接口

public interface IMessage {
    void send(String message);
}

创建具体实现角色

public class EmailMessage implements IMessage {
    @Override
    public void send(String message) {
        System.out.println("使用邮件消息发送" + message);
    }
}
public class SmsMessage implements IMessage {
    @Override
    public void send(String message) {
        System.out.println("使用短信消息发送" + message);
    }
}

创建抽象角色

创建抽象角色,担任桥接抽象角色,持有实现角色,且发送消息委派给实现对象发送

public abstract class AbastractMessage {
    // 持有实现角色的引用
    private IMessage message;
    // 构造函数,传入实现角色的引用
    public AbastractMessage(IMessage message) {
        this.message = message;
    }
    // 发送消息的方法,调用实现角色的方法
    void sendMessage(String message){
        this.message.send(message);
    }
}

创建修正抽象角色

创建普通消息

public class NomalMessage extends AbastractMessage {
    public NomalMessage(IMessage message) {
        super(message);
    }
}

创建重要消息

public class ImportanceMessage extends AbastractMessage {
    public ImportanceMessage(IMessage message) {
    	message = message + "【重要消息】";
        super(message);
    }
    void sendMessage(String message){
        super.sendMessage(message);
    }
}

客户端调用

    public static void main(String[] args) {
        IMessage message = new EmailMessage();
        AbastractMessage abastractMessage = new NomalMessage(message);
        abastractMessage.sendMessage("hello world");
        message = new SmsMessage();
        abastractMessage = new ImportanceMessage(message);
        abastractMessage.sendMessage("hello world");
    }

使用邮件消息发送hello world
使用短信消息发送hello world【重要消息】

到此这篇关于Java结构型设计模式之桥接模式详细讲解的文章就介绍到这了,更多相关Java桥接模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java结构型设计模式之桥接模式详细讲解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java结构型模式之桥接模式详解

桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独立变化的维度,通过桥接模式将这两个维度分离出来,使两者可以独立扩展
2023-02-17

详解PHP结构型设计模式之桥接模式BridgePattern

桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯。桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。本文通过示例详细介绍了桥接模式的原理与使用,需要的可以参考一下
2023-05-15

Golang设计模式中的桥接模式详细讲解

桥接模式是一种结构型设计模式,通过桥接模式可以将抽象部分和它的实现部分分离,本文主要介绍了GoLang桥接模式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2023-01-11

PHP结构型设计模式之桥接模式怎么实现

本篇内容介绍了“PHP结构型设计模式之桥接模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!桥接模式(Bridge Pattern)
2023-07-05

.Net结构型设计模式之桥接模式怎么实现

本篇内容介绍了“.Net结构型设计模式之桥接模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、动机(Motivation)在很多
2023-06-30

详解PHP设计模式之桥接模式

桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯。桥接模式将系统的抽象部分与实现部分分离解耦,使他们可以独立的变化。本文通过示例详细介绍了桥接模式的原理与使用,需要的可以参考一下
2022-12-20

Java结构型设计模式之装饰模式详解

装饰模式(DecoratorPattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能
2023-05-14

Golang设计模式之原型模式详细讲解

如果一个类的有非常多的属性,层级还很深。每次构造起来,不管是直接构造还是用建造者模式,都要对太多属性进行复制,那么有没有一种好的方式让我们创建太的时候使用体验更好一点呢?今天的文章里就给大家介绍一种设计模式,来解决这个问题
2023-01-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录