Java设计模式-桥接模式

目录

一、手机操作问题

二、传统方法

三、基本介绍

四、原理类图

五、使用桥接模式解决手机问题


一、手机操作问题

现在对不同手机类型的不同品牌实现操作编程( 比如 : 开机、关机、上网,打电话等) , 如图:

二、传统方法

传统方案解决手机操作问题分析
  1. 扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。
  2. 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本.
  3. 解决方案-使用桥接模式

三、基本介绍

桥接模式 (Bridge 模式 ) 是指:将 实现 抽象 放在两个不同的类层次中,使两个层次可以独立改变。 是一种结构型设计模式
Bridge 模式基于 类的最小设计原则 ,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction) 与行为实现 (Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展

四、原理类图

原理类图说明
  1. Client类:桥接模式的调用者
  2. 抽象类(Abstraction) :维护了 Implementor / 即它的实现类ConcreteImplementorA.., 二者是聚合关系, Abstraction 充当桥接类
  3. RefinedAbstraction: 是 Abstraction 抽象类的子类
  4. Implementor: 行为实现类的接口
  5. ConcretelmplementorA/B : 行为的具体实现类
  6. 从 UML 图:这里的抽象类和接口是聚合的关系,其实调用和被调用关系

五、使用桥接模式解决手机问题

使用 桥接模式 改进传统方式,让程序具有搞好的扩展性,利用程序维护

 使用桥接模式对应的类图

手机类,持有品牌类对象

public abstract class Phone {
	
	//组合品牌
	private Brand brand;

	//构造器
	public Phone(Brand brand) {
		super();
		this.brand = brand;
	}
	
	protected void open() {
		this.brand.open();
	}
	protected void close() {
		brand.close();
	}
	protected void call() {
		brand.call();
	}
	
}

子类

//折叠式手机类,继承 抽象类 Phone
public class FoldedPhone extends Phone {

	//构造器
	public FoldedPhone(Brand brand) {
		super(brand);
	}
	
	public void open() {
		super.open();
		System.out.println(" 折叠样式手机 ");
	}
	
	public void close() {
		super.close();
		System.out.println(" 折叠样式手机 ");
	}
	
	public void call() {
		super.call();
		System.out.println(" 折叠样式手机 ");
	}
}
==============================================
public class UpRightPhone extends Phone {
	
		//构造器
		public UpRightPhone(Brand brand) {
			super(brand);
		}
		
		public void open() {
			super.open();
			System.out.println(" 直立样式手机 ");
		}
		
		public void close() {
			super.close();
			System.out.println(" 直立样式手机 ");
		}
		
		public void call() {
			super.call();
			System.out.println(" 直立样式手机 ");
		}
}

 品牌类

//接口
public interface Brand {
	void open();
	void close();
	void call();
}

品牌子类

public class Vivo implements Brand {

	@Override
	public void open() {
		// TODO Auto-generated method stub
		System.out.println(" Vivo手机开机 ");
	}

	@Override
	public void close() {
		// TODO Auto-generated method stub
		System.out.println(" Vivo手机关机 ");
	}

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println(" Vivo手机打电话 ");
	}

}

==================================================
public class XiaoMi implements Brand {

	@Override
	public void open() {
		// TODO Auto-generated method stub
		System.out.println(" 小米手机开机 ");
	}

	@Override
	public void close() {
		// TODO Auto-generated method stub
		System.out.println(" 小米手机关机 ");
	}

	@Override
	public void call() {
		// TODO Auto-generated method stub
		System.out.println(" 小米手机打电话 ");
	}

}

客户端

public class Client {

	public static void main(String[] args) {
		
		//获取折叠式手机 (样式 + 品牌 )
		
		Phone phone1 = new FoldedPhone(new XiaoMi());
		
		phone1.open();
		phone1.call();
		phone1.close();
		
		System.out.println("=======================");
		
		Phone phone2 = new FoldedPhone(new Vivo());
		
		phone2.open();
		phone2.call();
		phone2.close();
		
		System.out.println("==============");
		
		UpRightPhone phone3 = new UpRightPhone(new XiaoMi());
		
		phone3.open();
		phone3.call();
		phone3.close();
		
		System.out.println("==============");
		
		UpRightPhone phone4 = new UpRightPhone(new Vivo());
		
		phone4.open();
		phone4.call();
		phone4.close();
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024如果创业适合干什么,普通人如何创业

五行学说是中国古代哲学中的一部分,将世界万物归纳为五种元素,分别是金、木、水、火和土。每个年份的五行组合不同,代表着特定的能量和属性。2024年什么生意好做。 一,物联网科技行业:庚子年的金属性与现代物联网科技的…

【JUnit技术专题】「入门到精通系列」手把手+零基础带你玩转单元测试,让你的代码更加“强壮”(夯实功底篇)

手把手零基础带你玩转单元测试,让你的代码更加“强壮” 前言介绍JUnit是什么?JUnit和xUnit之间的关系 JUnit的基本概念JUnit的特点什么是一个单元测试用例 JUnit的用法JUnit的最佳实践案例分析创建一个类创建 Test Case 类创建 Test Runner 类 JUnit总体…

第11章 GUI Page436 使用缓冲DC, wxBufferedPaintDC

所谓“缓冲DC”,是指将所有图元都先划到一个人眼看不到的“设备上下文”之上,最后再一次性复制到真正的屏幕DC之上,这样我们就看不到中间画的过程了,也就不会感到闪烁了。 注意,这时不能解除ScrolledWindow1的背景擦除…

千帆起航:探索百度智能云千帆AppBuilder在AI原生应用开发中的革新之路

千帆起航:探索百度千帆AppBuilder在AI原生应用开发中的革新之路 1.揭开帷幕,大模型第二次战役 自从 ChatGPT 横空出世后,一石激起千层浪,人工智能也正在从感知理解走向生成创造,这是一个关键里程碑。生成式大模型完成…

[x86汇编语言]从实模式到保护模式第二版

下载汇编器:https://www.nasm.us/pub/nasm/releasebuilds/2.16.02rc6/win64/ mov ax, 0x3f add bx,ax add cx,ax 编译: C:\Users\HP>cd D:\BaiduNetdiskDownload\01b站\lizhong\myasm C:\Users\HP>D: D:\BaiduNetdiskDownload\01b站\lizhong…

H.264宏块(Macroblock)概念(运动估计、变换编码、环路滤波)

参考文章:音视频高手课系列5-h264编码基础(宏块原理) 参考文章:切片slice与宏块,运动矢量 文章目录 使用videoEye分析视频宏块示例H.264宏块概念1. 宏块的定义2. 运动估计3. 变换编码4. 环路滤波5. 注意:宏块的概念既适用于帧内编…

智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.侏儒猫鼬算法4.实验参数设定5.算法结果6.…

虚拟机(centos)磁盘空间不够

磁盘空间不够 1.关机 2.打开设置-->硬盘 --> 扩展 3.搞定一半 4.开机进入终端 4.1 查看 lsblk 4.2 加起来 growpart /dev/sda 3 注1: 如果 growpart 提示没有的话需要安装一下 yum -y install cloud-utils-growpart 注2:3前面有个空格 4.3 再次…

java八股 redis

Redis篇-01-redis开篇_哔哩哔哩_bilibili 1.缓存穿透 2.缓存击穿 逻辑过期里的互斥锁是为了保证只有一个线程去缓存重建 3.缓存雪崩 4.双写一致性 4.1要求一致性(延迟双删/互斥锁) 延迟双删无法保证强一致性 那么前两步删缓和更新数据库哪个先呢&#xf…

实时数据获取:抖音API在电商中的应用与影响

在电商行业高速发展的今天,数据已经成为企业决策和创新的重要驱动力。抖音作为全球最大的短视频平台之一,其根据关键词取商品列表API为电商行业带来了前所未有的机遇和挑战。本文将深入探讨该API在电商行业中的关键作用,以及如何实现实时数据…

day48算法训练|动态规划part09

198.打家劫舍 1. dp数组(dp table)以及下标的含义 dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。 2.递推公式 决定dp[i]的因素就是第i房间偷还是不偷。 如果偷第i房间,那么…

微信小程序获取用户手机号码教程(前端+后端)

1.背景介绍 在开发一款微信小程序时,需要用户进行微信登录,获取用户的手机号码来作为用户的唯一标识(userId),于是探索获取用户手机号码的方式; (当然,通过wx.login来获取code&…

JavaOOP篇----第十七篇

系列文章目录 文章目录 系列文章目录前言一、怎么在JDBC内调用一个存储过程二、是否了解连接池,使用连接池有什么好处?三、你所了解的数据源技术有那些?使用数据源有什么好处?四、&和&&的区别五、静态内部类如何定义前言 前些天发现了一个巨牛的人工智能学习网…

❀My学习小记录之XML❀

目录 ❀My学习小记录之XML❀ 一、简介 二、发展历程 XML历史: 三、XML常见应用 四、语法格式及相关介绍 语法: 格式声明(指令): 元素: 标记(标签): 属性: 注…

【Docker容器精解篇 】深入探索Docker技术的概念与容器思想

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《docker容器精解篇》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、Docker 的介绍1.1 Docker 的由来1.1.1 环境不一致1.1.2 隔离性1.1.3 弹性伸缩1.1.4 学习成本 1.2 Doc…

Python遥感影像深度学习指南(3)-卫星图像语义分割之用PyTorch创建一个简单的U-Net 模型

在上一篇文章中,介绍了如何在不使用 torchvision 模块的情况下,创建卫星图像的多通道数据集。现在,我们将继续创建一个简单的深度学习模型,用于卫星图像的语义分割。 1、介绍 下图来自 "卷积神经网络实现了从高分辨率无人机图像中高效、准确、精细地分割植物物种和群…

Python 简易图形界面库easygui 对话框大全

easygui 安装 C:\> pip install easygui Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting easygui Using cached https://pypi.tuna.tsinghua.edu.cn/packages/8e/a7/b276ff776533b423710a285c8168b52551cb2ab0855443131fdc7fd8c16f/easygui-…

基于ssm服装店网站论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统服装销售信息管理难度大,容错率低&#xff0c…

执行 delete from t1 where id = 10;MySQL会加什么锁?

思考一个问题:下面一条简单的SQL,它加什么锁? delete from t1 where id 10; 带着你的答案,我们继续往下看。 如果要分析上述SQL的加锁情况,必须了解这个SQL的执行前提,MySQL的隔离级别是什么…

2024年元旦节放假通知

致尊敬的客户以及全体同仁: 旧岁已展千重锦,新年再进百尺竿。在这辞旧迎新之际,易天光通信提前祝您元旦快乐!生意兴隆,身体健康,万事如意!根据国家法定假期的规定,并结合公司实际情…