大话设计模式——11.桥接模式(Bridge Pattern)

news2024/11/28 12:53:45
简介

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

UML图:
6
应用场景:

  1. 系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性
  2. 不想使用继承导致系统类的个数急剧增加
  3. 某个类存在多个变化维度使用继承方式容易出现类的膨胀
示例

手机厂商和软件厂商

  1. 实现类:软件
public interface Software {

    /**
     * 运行
     */
    void run();
}

1.1 具体实现类:

public class MusicSoftware implements Software{
    @Override
    public void run() {
        System.out.println("运行 音乐软件");
    }
}
public class GameSoftware implements Software {

    @Override
    public void run() {
        System.out.println("运行 游戏软件");
    }
}
  1. 抽象类:手机
public abstract class Phone {


    protected Software software;

    public Phone(Software software) {
        this.software = software;
    }

    /**
     * 使用
     */
    public abstract void use();

}

2.1 实现类:

public class AndroidPhone extends Phone {

    public AndroidPhone(Software software) {
        super(software);
    }

    @Override
    public void use() {
        System.out.println("安卓手机....");
        software.run();
    }
}
public class IOSIphone extends Phone {


    public IOSIphone(Software software) {
        super(software);
    }

    @Override
    public void use(){
        System.out.println("苹果手机....");
        software.run();

    }
}
  1. 运行
public class Main {

    public static void main(String[] args) {
        Software musicSoftware = new MusicSoftware();
        Software gameSoftware = new GameSoftware();
        new AndroidPhone(musicSoftware).use();
        new IOSIphone(musicSoftware).use();
        new AndroidPhone(gameSoftware).use();
        new IOSIphone(gameSoftware).use();
    }
}

在这里插入图片描述

总结
  • 优点
    • 实现抽象和实现的分离,提高系统灵活性
    • 具备良好的扩展性,符合开闭原则
  • 缺点
    • 增加系统的理解和设计难度
VS 适配器模式
  • 适用阶段不同
    • 桥接模式用于设计的前期,精细化的设计,让系统更加灵活
    • 适配器模式用于设计完成之后,发现类、接口之间无法一同工作,需要进行填坑
  • 应用场景
    • 适配器模式经常用于在第三方API协同工作的场合

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

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

相关文章

Linux系统下关闭Java进程

关闭Java进程具体分为两步: 1.ps查进程ID 2.kill杀进程 具体的命令如下: ps查进程ID:ps -ef | grep java kill杀进程:kill -9 对应进程号 linux下解除被占用的端口号: 1.查看8088端口是否被占用: netsta…

设计模式之责任链模式讲解

概念:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。最匹配的场景应该就是逐层审批的模式。 责任链模式只有两个角色&#xff…

基于单片机三路地磁场分量信号采集系统仿真

**单片机设计介绍,基于单片机三路地磁场分量信号采集系统仿真 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机三路地磁场分量信号采集系统仿真概要主要包括以下几个方面:系统组成、信号采集原理…

(Git) gitignore基础使用

文章目录 前言.gitignore 模式匹配注释 #转义 \直接匹配任意字符匹配 *单个字符匹配 ?目录分割 /多级目录 **范围匹配 []取消匹配 ! 检查是否生效父子文件END 前言 Git - gitignore Documentation (git-scm.com) 在使用git管理的项目中,可以通过.gitignore文件管理…

MySQL操作DDL

目录 1.概述 2.数据库的增删改查 3.表的增删改查 3.1.创建和查看表结构 3.2.修改表 3.3.查看所有的表 3.4.删除表 4.用户 5.DDL在实际应用场景中的作用 5.1.数据库设计 5.2.数据库维护 ​​​​​​​5.3.数据库迁移或重置 ​​​​​​​5.4.优化性能 ​​​​​…

IoTeX的旅程并非孤军奋战

自2017年起,IoTeX便作为一个雄心勃勃的开源项目,踏上了一条为机器打造开放经济的道路。这个宏伟的目标背后,是一个去中心化的平台愿景,一个能够让人类和机器在有保障的信任、自由意志及精心设计的经济激励下相互协作的开放生态系统…

高项-案例分析练习(成本管理)

题目来源:信管网 案例一 某企业承接了某政府部门的系统集成项目,项目投标费用为5万元,预计每个子项目开发完成后的维护成本为50万元,项目初步的WBS分解结构如图所示。 题目一 【问题1】(2分) 假如估算出子…

BM96 主持人调度(二)(贪心算法)

一开始写的时候忘了给start、end数组赋值了 import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 计算成功举办活动需要多少名主持人* param n int整型 有n个活动* param start…

Walmart.com DSV XML对接需求

此前的文章Walmart.com DSV EDI对接需求中,为大家介绍了如果选择传输EDI文件需要做的准备与需求。本文将为大家介绍Walmart.com 与DSV(Drop Ship Vender)之间传输XML文件的需求。与EDI相比,XML文件的处理难度相对低一些。无论企业…

LiveGBS流媒体平台GB/T28181常见问题-系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤

LiveGBS系统服务日志如何配置日志个数日志路径日志时长web操作日志操如何配置保留天数及过滤 1、系统服务日志1.1、日志目录1.2、配置日志文件个数及记录时间1.3、配置日志文件路径 2、Web 操作日志2.1、配置保留天数2.2、配置不记录操作日志2.1.1、不记录所有2.1.2、不记录指定…

Python爬虫学习(三):parsel解析html

parse中可以使用css及xpath对html和xml进行解析,其中主要用到的方法如上图所示,并支持使用 XPath 和 CSS Selector 对内容进行提取和修改,同时它还融合了正则表达式提取的功能。方法使用代码示例如下,关于xpath相关方法的使用可以…

生产管理系统软件有哪些?盘点2024年五大好用的生产管理系统软件

生产管理系统软件有哪些?盘点2024年五大好用的生产管理系统软件! 一、为什么要使用生产管理系统? 为什么很多中小企业微制造的企业抱怨道:“订单越来越多,但利润越来越薄”?主要是因为传统中小微型制造企…

2024年最新渗透测试工具,看完赶紧存了!(工具包限时分享)

前言: 为了保护网络及国家安全,国家增强了对网络安全人才培养与建设的投入力度。网络安全相关职位的薪资待遇颇为丰厚,相关资格证书的补贴也相当可观,吸引了大批网安爱好者前来学习。但网络安全领域并不缺乏从业者,而…

基于LNMP环境上线QQ农场

目录 一.介绍 二. 环境准备 三.安装Mysql数据库 四.安装PHP 五.安装Nginx 六.测试Nginx服务于PHP服务是否能关联 七.项目上线 QQ农场源码:做本项目默认操作者有一定的基础知识与理解能力 链接:https://pan.baidu.com/s/1HF8GZ-yvNh7RbJ61nXOW-g?…

3.网络编程-TCP

目录 TCP 建立连接的过程是怎样的 TCP为什么是三次握手 TCP 断开连接的过程是怎样的 TCP挥手为什么需要四次 为什么TIME_WAIT等待的时间是2MSL TCP详解之滑动窗口 TCP 半连接队列和全连接队列是什么 TCP粘包,拆包是怎么发生的,如何解决 TCP是如何…

使用docker-compose创建多项目容器运行

使用docker-compose创建多项目容器运行 按招网友提供方法创建 docker-compose.yml内容(这里改了桥接模式,并且注释放开)version: "3" services:docker_python:image: python:2.7.18container_name: py_appworking_dir: "/root"restart: alwaysvolumes:-…

分享几个免费的SSL证书/https证书

我们要明确什么是SSL证书。SSL,全称为Secure Sockets Layer,即安全套接层,是一种用于保障网络数据传输安全的技术。通过使用SSL证书,可以确保用户在访问网站时的数据传输过程中不被第三方窃取或篡改,从而保障用户的隐私…

有些人有些事,看开就好

前一段时间收到客户询盘部署一个系统500行不?一次性搭建60套,按照我的报价300*60?这么大的馅饼么?这个月营收要爆棚了。用小米的Slogon来讲:永远相信美好的事情即将发生。本以为是个意外惊喜,没想到社会果然…

nssm 工具把asp.net core mvc变成 windows服务,使用nginx反向代理访问

nssm工具的作用&#xff1a;把项目部署成Windows服务&#xff0c;可以在系统后台运行 1.创建一个asp.net core mvc的项目weblication1 asp.net core mvc项目要成为windows服务需要安装下面的nuget包 <ItemGroup><PackageReference Include"Microsoft.Extension…

小红书商业IP变现策略与实操经验分享

一、个人介绍与背景 1. 创业者背景 作为连续创业者&#xff0c;我创立了树叶有光品牌&#xff0c;并在多个领域有所涉猎&#xff0c;如人生陪跑师、财富卡点爆破师等。这些多重身份让我在创业过程中积累了丰富的经验和独特的视角。 二、小红书账号运营经验 1. 运营成果 经…