Kotlin~Bridge桥接模式

概念

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

抽象(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.rhkb.cn/news/95850.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

综述:计算机视觉中的图像分割

一、说明 这篇文章是关于图像分割的探索,这是解决计算机视觉问题(如对象检测、对象识别、图像编辑、医学图像分析、自动驾驶汽车等)的重要步骤之一。让我们从介绍开始。 二、图像分割介绍 图像分割是计算机视觉中的一项基本任务,涉…

内网隧道代理技术(十七)之 NPS的使用

NPS的介绍和使用 NPS介绍 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,…

自动驾驶技术:改变交通出行的未来

自动驾驶技术,这个让人充满期待的技术,正在改变我们的交通方式,带来一种全新的出行体验。它可以让汽车、无人机等交通工具像人类驾驶一样自主行驶,通过人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作,实现…

支持M1 Syncovery for mac 文件备份同步工具

Syncovery for Mac 是一款功能强大、易于使用的文件备份和同步软件,适用于需要备份和同步数据的个人用户和企业用户。Syncovery 提供了一个直观的用户界面,使用户可以轻松设置备份和同步任务。用户可以选择备份的文件类型、备份目录、备份频率等&#xf…

模型评估的常用指标

模型评估的指标 模型是在大量的数据集上训练而来的,无论一个模型是从零训练的还是基于某一个模型,通过微调方法得到的,靠人工评价模型的效果都是异常困难的。那么要想客观的、自动化的评价一个LLM模型,就需要能够选择正确评估模型效果的指标或者基准测试,来客观和自动化的…

FANUC机器人加减速倍率指令ACC的使用方法说明

FANUC机器人加减速倍率指令ACC的使用方法说明 单位有一台FANUC机器人(型号:M-900iB 360kg),偶尔会在启动的瞬间会报SRVO-050碰撞检测报警,而事实上机器人并没有开始移动或和其他工件产生碰撞,一直查了很长时间,也没有查到具体的原因,也尝试过重新进行负载推算,但是偶尔…

【Java】对象数组排序(Comparable接口/Comparator接口)

Comparable接口(compareTo) Arrays 类中的 sort 方法承诺可以对对象数组进行排序,但要求满足下列前提:对象所属的类必须实现了 Comparable 接口,且定义了compareTo方法。 Comparable接口的代码 public interface Comp…

CW4L2-3A-S电源滤波器

CW4L2-3A-T CW4L2-6A-T CW4L2-10A-T CW4L2-20A-T CW4L2-3A-S CW4L2-6A-S CW4L2-10A-S CW4L2-20A-S 安装位置应靠近电源线入口处,尽可能滤除沿电源线侵入和窜出的电磁干扰。 确保滤波器外壳与设备机箱良好电接触,并接好地线。 滤波器的输入输出…

Axios使用CancelToken取消重复请求

处理重复请求:没有响应完成的请求,再去请求一个相同的请求,会把之前的请求取消掉 新增一个cancelRequest.js文件 import axios from "axios" const cancelTokens {}export const addPending (config) > {const requestKey …

分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测

分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测,运行环境Matlab2023b及以上…

8月16日上课内容 部署LVS-DR群集

本章结构: 数据包流向分析: 数据包流向分析: (1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。 &#xf…

【LeetCode75】第三十三题 二叉树的最大深度

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 从这一题开始,LeetCode75进入到了二叉树章节。 这边建议不熟悉二叉树的小伙伴可以先去做做力扣的前序遍历,中序遍…

Dubbo Spring Boot Starter 开发微服务应用

环境要求 系统:Windows、Linux、MacOS JDK 8 及以上(推荐使用 JDK17) Git IntelliJ IDEA(可选) Docker (可选) 项目介绍 在本任务中,将分为 3 个子模块进行独立开发&#xff…

谷歌在Chrome浏览器中推进抗量子加密技术

近日,Chromium博客上发表的一篇博文称,为了加强网络安全,应对迫在眉睫的量子计算机威胁,谷歌各个团队密切合作,为网络向抗量子密码学的过渡做好准备。 谷歌的Chrome团队在博客中写道,该项目涉及修订技术标准…

微服务-Fegin

在之前我们两服务之间调用的时候用的是restTemplate,但是这个方式调用存在很多的问题 String url "http://userservice/user/" order.getUserId(); 代码可读性差,编码体验不统一参数复杂的url难以维护 所以我们大力推出我们今天的主角--Fegin Feign是…

完美解决微信小程序使用复选框van-checkbox无法选中

由于小程序使用了vant-ui框架&#xff0c;导致checkbox点击无法选中问题 <van-checkbox value"{{ checked }}" shape"square"><view class"check-content"><view class"checktext">我已阅读并同意>《用户协议》…

C的进阶C++学习方向

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

Linux系统之安装my-mind思维导图工具

Linux系统之安装my-mind思维导图工具 一、my-mind介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查端口占用情况 四、安装httpd4.1 检查本地yum仓库4.2 安装httpd4.3 关闭防火墙和selinux4.4 创建…

AutoCompany模型的概念设计,涵盖了AI智能公司的各个角色

AutoCompany模型的概念设计&#xff0c;涵盖了AI智能公司的各个角色 自动化企业概念设计与设想&#xff0c;文本将介绍AutoCompany模型的概念设计&#xff0c;涵盖了AI智能公司的各个角色&#xff0c;并结合了GPT-4接口来实现各个角色的功能&#xff0c;设置中央控制器&#xf…

uni-app根据经纬度逆解析详细地址

uni-app中的getLocation()方法可以获取到用户当前的地理位置&#xff08;经纬度&#xff09;、速度。 但是返回参数中的address在app中才会显示&#xff0c;小程序中不会显示&#xff0c;所以我们需要进行逆解析其地址&#xff0c;解析出它的地址信息。 1.首先要在腾讯位置服务…