23种设计模式—之桥接模式

Syzkaller实战教程2:运行环境配置+实例运行 本文详细介绍了在linux系统上搭建Syzkaller内核模糊测试环境的完整流程。 1.环境配置:通过VMware创建Ubuntu20.04虚拟机A,配置QEMU/KVM虚拟化环境,安装Go语言工具链和Syzkaller; 2.内核编译:下载Linux内核源码并配置KCOV等调试选项,编译生成带覆盖率支持的bzImage内核镜像; 3.测试环境构建:使用debootstrap创建Debian虚拟机镜像,通过QEMU启动嵌套虚拟机B; 实例测试: 4.演示两种测试场景 - 提供完整上手教程 阅读详情

 1、桥接模式介绍


        桥接是什么?是指在传统的抽象与实现之间建立一个桥梁,使它们各自分开,消除他们之间的依赖关系,使它们各自富于变化,而不相互不受影响。也就是说桥接模式将抽象和行为划分开来,各自独立,但能动态地结合。


        桥接模式的定义:是对象结构型模式(接口模式/柄体模式)、将抽象部分与它的实现部分分离,使它们都可以独立地变化。

        桥接模式将抽象化与实现化解耦:

                       抽象化:存在多个实体中的共同的概念性联系。

                       实现化:将抽象化给出的具体实现。

                     


2、举例实现

        在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。


        例子说明:一个日志系统中、有三种记录日志的方式(数据库记录、文本记录、XML文件记录)、两种平台来实现日志系统。如果说按照我们传统的做法、是不是一个平台下有三种记录日志的方式、我们得设计几个类?


         这个UML类图告诉我们,如果按照传统的做法,我们至少需要10个类。添加了设计者的麻烦、也不符合设计原则。那么桥接模式将如何去实现这个日志系统呢?看看用桥接模式构造后的类图。

       

        

           角色说明:

                  1、抽象化角色:是桥接是抽象化类、包含实现具体的行为,特征和ImplLog接口。

                  2、修正抽象化角色:是继承抽象的子类,改变和修正父类对抽象化的定义。

                  3、实现化角色:模板目标接口类,给出实现化的接口,不具体实现。

                  4、具体实现化角色:目标实现类,是实现化角色的具体实现。




3、Java代码实现

3.1、抽象化角色

package com.czy.bride;

//日志抽象类
public abstract class Log {
	//组合
	protected ImplLogs implLogs;
	public Log( ImplLogs implLogs){
		this.implLogs = implLogs;
	}
	
	//日志的抽象方法
	public abstract void wirter(String log);
}

 


3.2、实现化角色

package com.czy.bride;


//平台的抽象类
public abstract class ImplLogs {
	
	//平台的抽象方法
	public abstract void pingtai(String imlog);
}

 

 

3.3、具体实现化角色

package com.czy.bride;

//Java平台的抽象类实现
public class ImplLogsJava extends ImplLogs {

	@Override
	public void pingtai(String imlog) {
		// TODO Auto-generated method stub
		System.out.println("Java平台上实现日志记录"+imlog);
	}

}


 


3.3、具体实现化角色

package com.czy.bride;


//net平台的抽象类实现
public class ImplLogsNet extends ImplLogs {

	@Override
	public void pingtai(String imlog) {
		// TODO Auto-generated method stub
		System.out.println("Net平台上实现日志记录"+imlog);
	}

}


 


3.4、实现化角色

package com.czy.bride;


//数据库的方式日志的抽象类实现
public class LogDataBase extends Log {

	@Override
	public void wirter(String log) {
		// TODO Auto-generated method stub
		implLogs.pingtai("使用数据库的方式:"+log);
	}

	public LogDataBase(ImplLogs implLogs) {
		super(implLogs);
		// TODO Auto-generated constructor stub
	}
	
}


 


3.4、实现化角色

package com.czy.bride;


//文本的方式日志的抽象类实现
public class LogTestFile extends Log {

	@Override
	public void wirter(String log) {
		// TODO Auto-generated method stub
		implLogs.pingtai("使用文本的方式:"+log);
	}

	public LogTestFile(ImplLogs implLogs) {
		super(implLogs);
		// TODO Auto-generated constructor stub
	}

}




 4、测试类

 

public class BridgeTest {

	//main
	public static void main(String[] args) {

		//2种平台对象
		ImplLogs jimplLogs = new ImplLogsJava();
		//java平台日志实现
		Log jdlog = new LogDataBase(jimplLogs);
		Log jflog2 = new LogTestFile(jimplLogs);
		jdlog.wirter("DB 记录");
		jflog2.wirter("Text 记录");
		
		
		//2种平台对象
		ImplLogs nimplLogs = new ImplLogsNet();
		//.net平台日志实现
		Log nflog = new LogTestFile(nimplLogs);
		Log ndlog2 = new LogDataBase(nimplLogs);
		nflog.wirter("Text 记录");
		ndlog2.wirter("DB 记录");

	}

}

 

 

5、新添加的一个平台

5.1、具体实现化角色

package com.czy.bride;


//添加一个新的平台
public class ImplLogsAdd_PHP extends ImplLogs {

	@Override
	public void pingtai(String imlog) {
		// TODO Auto-generated method stub
		System.out.println("新添加的PHP平台、"+imlog);
	}

}

 

6、测试

package com.czy.bride;

public class BridgeTest {

	//main
	public static void main(String[] args) {

		//2种平台对象
		ImplLogs jimplLogs = new ImplLogsJava();
		//java平台日志实现
		Log jdlog = new LogDataBase(jimplLogs);
		Log jflog2 = new LogTestFile(jimplLogs);
		jdlog.wirter("DB 记录");
		jflog2.wirter("Text 记录");
		
		
		//2种平台对象
		ImplLogs nimplLogs = new ImplLogsNet();
		//.net平台日志实现
		Log nflog = new LogTestFile(nimplLogs);
		Log ndlog2 = new LogDataBase(nimplLogs);
		nflog.wirter("Text 记录");
		ndlog2.wirter("DB 记录");
		
		//新添加PHP平台
		ImplLogs php = new ImplLogsAdd_PHP();
		Log pd= new LogDataBase(php);
		Log pf = new LogTestFile(php);
		System.out.println();
		System.out.println("新添加的PHP平台、只需继承ImplLogs抽象类就好了!");
		pd.wirter("DB 记录");
		pf.wirter("Text 记录");
	}

}


上面用了对象组合的关系、解耦了抽象和实现类之间的固有的绑定关系,使得抽象类与实现可以各自变化。

 

 

 

 

 

 

【WRF湿度调整策略】WRF/ERA5湿度数据对比 阅读详情

相关推荐

半监督的医学分割数据集(LA, Pancreas, ACDC和PROMISE12)分享

这篇文章提供了四个常用的半监督医学分割数据集,所有数据集都已经被处理成了.h5文件。下载之后就可以直接使用

qq_45691955的博客 4182

浅学设计模式之桥接<bridge>模式

今天一直心绪不宁,被一些事情所困扰,希望能有个好的过程以及结果而不是自己的空想。看一下桥接模式吧,个人感觉这个模式是个比较容易理解的模式,但是在真正应用的时候还是需要一定的经验。 概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Br...

baobaoupup 266

记录LeNet的硬件加速器设计(一)

LeNet的硬件加速器设计实现。

2301_81029398的博客 3546

【深入理解设计模式】桥接设计模式

桥接设计模式是一种结构型设计模式,它旨在将抽象部分与实现部分分离,使它们可以独立变化,从而更好地管理复杂性。桥接模式通常涉及多个层次的抽象,其中一个层次(通常称为"抽象")依赖于另一个层次(通常称为"实现")的实例。

guojiaqi_的博客 1354

[事件相机1]2024CVPR:Event Stream-based Visual Object Tracking: A High-Resolution Benchmark Dataset

作者:Xiao Wang, Shiao Wang, Chuanming Tang, Lin Zhu, Bo Jiang, Yonghong Tian, Jin Tang代码:https://github.com/Event-AHU/EventVOT_Benchmark。

m0_37412775的博客 1708

手把手教你用GD32F407VET6的EXMC驱动外部SRAM,搞定大内存需求

本文详细介绍了如何使用GD32F407VET6的EXMC外设驱动外部SRAM,解决嵌入式开发中的大内存需求问题。通过硬件连接方案、EXMC时序配置与初始化步骤,以及软件集成与内存管理技巧,帮助开发者快速实现内存扩展。特别适合需要处理图形显示缓冲、音频处理等大内存场景的GD32F407开发者。

weixin_30752699的博客 348

桥接模式的理解和实践

首先,我们定义一个颜色接口,作为实现部分。// 颜色接口,作为实现部分2. 实现具体颜色类然后,我们实现具体的颜色类,如红色和蓝色。// 红色类,实现Color接口@Override// 蓝色类,实现Color接口@Override3. 定义抽象部分接口接下来,我们定义一个图形接口,作为抽象部分。这个接口包含一个对颜色接口的引用。// 图形接口,作为抽象部分// 构造函数,设置颜色// 抽象方法,由具体图形类实现// 调用颜色的applyColor方法4. 实现具体图形类。

huaqianzkh的专栏 1445

高等数学第五章---定积分(§5.3定积分的计算方法)

这篇博客详细讲解定积分的计算方法,包括直接法、凑微分法、变量代换法和分部积分法。通过典型例题演示如何运用这些技巧计算定积分,特别强调换元必换限的原则和奇偶函数的简化处理。内容涵盖代数变形、三角代换、分段函数积分等常见题型,并附有详细的解题步骤和常见错误分析。适合微积分学习者系统掌握定积分计算技巧,提升解题效率。文中还包含积分等式证明和变限积分函数求导等进阶内容,帮助读者深入理解定积分的应用。

2302_77045867的博客 4356

设计模式笔记之---桥接模式

桥接模式(Bridge):将抽象部分与它的实现分离,使它们都能够独立的变化。 桥梁模式的设计思想是在软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化,以减少耦合。 UML类图:                     模式说明: Abstraction        抽象类,定义了一套使用和操作接

firehood的专栏 2449

ARM架构下的SLAM部署避坑指南:香橙派AIpro与D435i深度相机的实战解析

本文详细解析了在ARM架构的香橙派AIpro开发板上部署SLAM算法并与Intel D435i深度相机配合的实战经验。内容涵盖系统配置、ROS编译、驱动安装、算法优化等关键步骤,提供了具体的避坑指南和性能调优技巧,帮助开发者在嵌入式平台上高效实现实时SLAM应用。

f0g1h2的博客 983

c#仿热血江湖

Int32_1 = (int) table.Rows[i]["FLD_初级附魂"],Int32_2 = (int) table.Rows[i]["FLD_中级附魂"],Int32_3 = (int) table.Rows[i]["FLD_是否绑定"],Int32_0 = (int) table.Rows[i]["FLD_进化"],Form1.smethod_1(2, "加载百宝阁物品----没有百宝阁数据");Form1.smethod_1(2, "加载物品商店----没有物品数据");

weixin_42132177的博客 143

桥接模式:优雅地分离抽象和实现

"将抽象部分与实现部分分离,使它们可以独立变化"。——《设计模式:可复用面向对象软件的基础》这个定义简明扼要地概括了桥接模式的核心思想:将抽象部分和实现部分分离,使它们可以独立变化。这种分离提高了代码的灵活性和可扩展性,并且可以在运行时动态地选择具体的实现类,并将其绑定到抽象部分。桥接模式作为一种结构型设计模式,它主要目的是将抽象部分与实现部分分离,使它们可以独立变化。以下是桥接模式的优缺点:优点:分离抽象和实现:桥接模式分离了抽象部分和实现部分,使得它们可以独立地进行扩展,而不是紧密耦合在一起。

BASK2312的博客 442

2025年最新自动化/控制保研夏令营&预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题。

Control Everything 2584

23种设计模式之桥接模式(Bridge Pattern)

本篇文章将23种设计模式中的桥接模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

23种设计模式——桥接模式 (Bridge Pattern)详解

本文介绍了23种经典设计模式之——桥接模式(Bridge Pattern)的使用及说明

Meteors.的博客 1225

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

23种设计模式之桥接模式

23种设计模式之桥接模式 文章目录23种设计模式之桥接模式参考资料一、简介定义特点通用类图优点应用场景二、桥接模式三、总结 参考资料 Java设计模式:23种设计模式全面解析(超级详细) 韩顺平老师的Java设计模式(图解+框架源码剖析) 秦小波老师的《设计模式之禅》 下文如有错漏之处,敬请指正 一、简介 定义 将抽象部分与它的行为部分实现分离,保持各个部分的独立性和其功能的可扩展性 抽象:对事物的抽象 (名词) 接口:对行为的抽象 (动词) 特点 桥接模式是一种结构型设计模式 通用类图 桥接

space_qi的博客 463

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

23种设计模式——桥接模式(Bridge Pattern)

GitHub代码 桥接模式  假设我们这有几电脑,信息如下: 品牌 系统 系统版本 显卡 Dell OS:Windows Win10 NVIDIA MacBoox MacOS macOS 10.15 Intel 组装机 Linux Linux_CentOS release 6.5 AMD 我们定义一个抽象类来记录这些信息,并且用电脑看个电影玩个游戏: using Sys...

kun_wang的博客 285

【23种设计模式】之桥接模式(Bridge Pattern) .Net Core实现

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 415

Java GoF 23种设计模式-结构型模式-桥接模式(Bridge Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现 一、模式定义 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 二、模式动机 一个类存在两个(或多个)独立变化的维度,且这两个维度都可能变化; 在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。 三、模式结构 桥接模式包含如下角色: Abstraction:抽象类 RefinedAbstraction:扩充抽象类

WU4566285的博客 471

java 23 种设计模式-07-java 桥接模式(Bridge Pattern)

目录 目录 桥接模式 实际案例 定义 测试 实现方式 UML &amp;amp; Code UML Code 系列导航 桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式, 它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的...

3万+

23种设计模式——桥接模式

文章目录23种设计模式——桥接模式1、桥接模式概述2、桥接模式结构3、桥接模式的实现4、桥接模式的注意事项和细节 23种设计模式——桥接模式 1、桥接模式概述 桥接模式介绍 桥接(Bridge)模式是指:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 桥接模式是一种结构性模式。 桥接模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Impleme

万里顾一程的博客 927

瑞_23种设计模式_桥接模式

本文章为瑞_系列专栏之《23种设计模式》的桥接模式篇。桥接(Bridge Pattern)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

阿瑞——从事Java后端,喜欢研读源码、自研框架、分享经验 1744

23种设计模式----桥接模式(Bridge Pattern)

如果一个抽象类或接口有多个具体实现子类,而这些子类之中有内容或概念上重叠,需要我们把抽象的共同部分各自独立开来:即原来是准备放在一个接口里,现在需要设计两个接口——抽象接口和行为接口。然后再分别针对各自的具体子类定义抽象接口和行为接口的方法和调用关系。 桥接模式的用意是将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。 public abst...

u012075901的博客 234

【23种设计模式】桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 我们通过下面的实例来演示桥接模式(Bridge Pattern...

猫巳的博客 473

23种设计模式一桥接模式

桥接模式是一种结构型设计模式,通过分离抽象部分与实现部分,使两者能独立变化。它解决了类爆炸问题,适用于存在多个变化维度的场景。核心角色包括抽象化角色、扩展抽象化角色、实现化角色和具体实现化角色。以手机品牌(苹果、华为)和软件(微信、抖音)为例,桥接模式只需7个类即可组合不同品牌和软件,避免了传统继承方式需要12个类的问题。该模式提高了系统灵活性,降低了类之间的耦合度。

J_liaty的博客 912
上一篇: DAO设计模式之禅之数据库万能查询操作
下一篇: 畅想“互联网 + ”,畅想未来
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值