Kotlin~Bridge桥接模式

news2024/11/24 9:47:37

概念

抽象和现实之间搭建桥梁,分离实现和抽象。

抽象(What)实现(How)
用户可见系统正常工作的底层代码
产品付款方式
定义数据类型的类。处理数据存储和检索的类

角色介绍

  • Abstraction:抽象 定义抽象接口,通常包含对实现接口的引用。
  • Refined Abstraction:扩展抽象,对抽象的扩展,可以是抽象类的子类或具体实现类。
  • Implementor:实现,定义实现接口,提供基本操作的接口。
  • Concrete Implementor:具体实现,实现实现接口的具体类。

UML

在这里插入图片描述

代码实现

abstract class Product(payment: Payment) {
    abstract fun purchase()
}

/**
 * 图书
 */
class Book(private val payment: Payment) : Product(payment) {
    override fun purchase() {
        payment.processPayment()
        println("Purchase book")
    }
}

/**
 * 电子书
 */
class Electronics(private val payment: Payment) : Product(payment) {
    override fun purchase() {
        payment.processPayment()
        println("Purchase electronics")
    }
}
interface Payment {
    fun processPayment()
}
/**
 * 信用卡支付
 */
class CreditCartPayment() : Payment {
    override fun processPayment() {
        println("Processing credit card payment")
    }
}

/**
 * 微信支付
 */
class WeCharPayment() : Payment {
    override fun processPayment() {
        println("Processing wechat payment")
    }
}

/**
 * 新增现金支付
 */
class CashPayment() : Payment {
    override fun processPayment() {
        println("Processing cash payment")
    }
}

fun main() {
    val creditCart: Payment = CreditCartPayment()
    val wechat: Payment = WeCharPayment()
    val cash: Payment = CashPayment()

    val electronics = Electronics(creditCart)
    electronics.purchase()
    val book = Book(wechat)
    book.purchase()
    val book1 = Book(cash)
    book1.purchase()
}

优缺点

优点

  • 让抽象和实现独立
  • 灵活和扩展的架构
  • 增加代码复用性,可读性和可维护性
  • 简化测试和调试

缺点

  • 增加复杂度
  • 更多的规划和设计工作
  • 不必要的抽象和冗余代码
  • 可读性降低

应用场景

隐藏实现细节,避免抽象和实现的绑定(运行时切换实现和动态配置),提高代码可扩展性。

  • GUI框架,用户界面和实现分离
  • 绘图程序,形状、颜色线条分离以支持不同的组合。
  • 数据库驱动系统,数据api和增删查改分离支持不同的数据库。

总结

和适配器模式区别,代理模式是一种架构设计,适用于前期设计,而适配器模式是基于已有代码出现了不兼容,将不兼容的接口连接起来。
参考:

  • 桥接模式(Bridge Pattern)-(最通俗易懂的案例)_bridge 模式例子_你上来晒太阳的的博客-CSDN博客
  • 桥接模式 — 举例子经典

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/893182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app中监听网络状态,并在嵌入webView页面的组件中添加网络监测

uni-app中监听网络状态,并在嵌入webView页面的组件中添加网络监测 uni-app中监听网络状态 下载插件 打开网络异常组件页面,点击"下载插件并导入HBuilderX"按钮,打开HBuilderX软件后,选择需要导入插件的项目&#xff…

Web菜鸟入门教程 - Springboot接入认证授权模块

网络安全的重要性不言而喻,如今早已不是以前随便弄个http请求就能爬到数据的时代,而作为一个架构师,网络安全必须在产品开发之初就考虑好。因为在产品开发的后期,一方面是客户增多,压力变大,可供利用的时间…

Java Persistence APl(JPA)——JPA是啥? SpringBoot整合JPA JPA的增删改查 条件模糊查询 多对一查询

目录 引出Jpa是啥?Jpa的使用创建实体类写dao接口类写服务类 crud增删改查增加修改根据id删除全查询分页查询 条件查询模糊查询单条件查询多条件查询模糊查询排序查询 多对一查询定义实体类auto主键策略下新增进行全查询测试 全部代码application.yml配置类pom配置文…

桌面软件开发框架 Electron、Qt、WPF 和 WinForms 怎么选?

一、Electron Electron 是一个基于 Web 技术的跨平台桌面应用程序开发框架。它使用 HTML、CSS 和 JavaScript 来构建应用程序界面,并借助 Chromium 渲染引擎提供强大的页面渲染能力。Electron 的主要特点包括: 跨平台:Electron 可以在 Windows、macOS 和 Linux 等多个主流操…

18万字应急管理局智慧矿山煤矿数字化矿山技术解决方案WORD

导读:原文《18万字应急管理局智慧矿山煤矿数字化矿山技术解决方案WORD》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 目 录 第一章 项目概述 1.1项目…

C的进阶C++学习方向

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的…

创建和运行 Ansible 临时命令

创建和运行 Ansible 临时命令 作为系统管理员,您需要在受管节点上安装软件。 请按照正文所述,创建一个名为 /home/curtis/ansible/adhoc.sh 的 shell 脚本,该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库: 存储库…

一次Linux中的木马病毒解决经历(6379端口---newinit.sh)

病毒入侵解决方案 情景 最近几天一直CPU100%,也没有注意看到了以为正常的服务调用,直到腾讯给发了邮件警告说我的服务器正在入侵其他服务器的6379端口,我就是正常的使用不可能去入侵别人的系统的,这是违法的. 排查 既然入侵6379端口,就怀疑是通过我的Redis服务进入的我的系统…

【Linux】Linux工具篇(yum、vim、gcc/g++、gdb、Makefile、git)

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛹Linux 🛸C 📕 学习格言:博观而约取&#xff…

vue3+elementPlus table里添加输入框并提交校验

<template><div><el-form :model"info" ref"forms"><el-tableref"tableRef":data"info.data"border><el-table-column align"center" property"name" label"*姓名"><…

三维模型OSGB格式轻量化技术在大规模场景的加载和渲染的作用分析

三维模型OSGB格式轻量化技术在大规模场景的加载和渲染的作用分析 在移动设备上&#xff0c;大规模场景的加载和渲染是一个不容忽视的问题。对于OSGB格式轻量化处理来说&#xff0c;大规模场景的加载和渲染也是其中一项重要的任务。本文将重点分析OSGB格式轻量化处理在大规模场景…

大语言模型与语义搜索;钉钉个人版启动内测,提供多项AI服务

&#x1f989; AI新闻 &#x1f680; 钉钉个人版启动内测&#xff0c;提供多项AI服务 摘要&#xff1a;钉钉个人版正式开始内测&#xff0c;面向小团队、个人用户、高校大学生等人群。该版本具有AI为核心的功能&#xff0c;包括文生文AI、文生图AI和角色化对话等。用户可通过…

通讯协议043——全网独有的OPC HDA知识一之聚合(十一)持续良好时间

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

Diffusion Probabilistic Priors for Zero-Shot Low-Dose CT Image Denoising

Zero-Shot 低剂量CT图像去噪的扩散概率先验 论文链接&#xff1a;https://arxiv.org/abs/2305.15887 项目链接&#xff1a;https://github.com/DeepXuan/Dn-Dp Abstract 低剂量CT图像去噪是医学图像计算中的一项关键任务。近年来&#xff0c;基于监督的深度学习方法在这一领…

【Windows系统编程】06.HotFixHook与进程通信(详解HotFixHook)

上一讲讲到的InlineHook&#xff0c;每次Hook的时候&#xff0c;都要读写两次内存&#xff08;先Hook&#xff0c;再还原&#xff09;这种Hook方式&#xff0c;性能比较低&#xff0c;今天我们讲的这种Hook方式&#xff0c;可以说是InlineHook的升级版本 HotFix&#xff08;热…

Android性能优化----执行时间优化

作者&#xff1a;lu人皆知 在APP做启动优化时&#xff0c;Application会做一些初始化的工作&#xff0c;但不要在Application中做耗时操作&#xff0c;然而有些初始化工作可能是很耗时的&#xff0c;那怎么办&#xff1f;初始化操作可以开启子线程来完成。 计算执行时间 常规…

Android控件【ProgressBar】

文章目录 常用属性项目结构主要代码 常用属性 max&#xff1a;进度条的最大值progress&#xff1a;进度条已完成进度值indeterminate&#xff1a;如果设置成true&#xff0c;则进度条不精确显示进度style"?android:attr/progressBarStyleHorizontal"&#xff1a;水…

ubuntu 22.04 LTS 在 llvm release/17.x 分支上编译 cookbook llvm example Chapter 02

下载 llvm-cookbook example: $ git clone https://github.com/elongbug/llvm-cookbook.git 开发环境&#xff1a; 从apt source 安装llvm、clang和lldb&#xff1a; $ apt install llvm $ apt install llvm-dev $ apt install clang $ apt install lldb $ cd llvm-cookboo…

c语言生成.exe文件的方法

一、在Windows shell下使用gcc命令 1、需要下载获取GCC安装包 官网:MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net 其他下载: 文件文件大小:48.0 M|https://wwnb.lanzoul.com/iIsq815lktfchttps://download.c