《研磨设计模式》chap24 桥接模式bridge(2)场景应用
1. 模式应用到场景中
public abstract class AbstractMessage {//持有一个实现部分的对象 protected MessageImplementor impl;public AbstractMessage(MessageImplementor impl){this.impl = impl;}public void sendMessage(String message,String toUser){this.impl.send(message, toUser);}
}
public class CommonMessage extends AbstractMessage{public CommonMessage(MessageImplementor impl) {super(impl);} public void sendMessage(String message, String toUser) {//对于普通消息,什么都不干,直接调用父类的方法,把消息发送出去就可以了super.sendMessage(message, toUser);}
}
public class MessageEmail implements MessageImplementor{public void send(String message, String toUser) {System.out.println("使用Email的方式,发送消息'"+message+"'给"+toUser);}}public interface MessageImplementor {/*** 发送消息* @param message 要发送的消息内容* @param toUser 把消息发送的目的人员*/public void send(String message,String toUser);
}
public class MessageMobile implements MessageImplementor{public void send(String message, String toUser) {System.out.println("使用手机短消息的方式,发送消息'"+message+"'给"+toUser);}
}
public class MessageSMS implements MessageImplementor{public void send(String message, String toUser) {System.out.println("使用站内短消息的方式,发送消息'"+message+"'给"+toUser);}
}public class SpecialUrgencyMessage extends AbstractMessage{public SpecialUrgencyMessage(MessageImplementor impl) {super(impl);}public void hurry(String messageId) {//执行催促的业务,发出催促的信息}public void sendMessage(String message, String toUser) {message = "特急:"+message;super.sendMessage(message, toUser);//还需要增加一条待催促的信息}
}
public class UrgencyMessage extends AbstractMessage{public UrgencyMessage(MessageImplementor impl) {super(impl);}public void sendMessage(String message, String toUser) {message = "加急:"+message;super.sendMessage(message, toUser);}/*** 监控某消息的处理过程* @param messageId 被监控的消息的编号* @return 包含监控到的数据对象,这里示意一下,所以用了Object*/public Object watch(String messageId) {//获取相应的数据,组织成监控的数据对象,然后返回 return null;}
}public static void main(String[] args) {//创建具体的实现对象MessageImplementor impl = new MessageSMS();//创建一个普通消息对象AbstractMessage m = new CommonMessage(impl);m.sendMessage("请喝一杯茶", "小李");//创建一个紧急消息对象m = new UrgencyMessage(impl);m.sendMessage("请喝一杯茶", "小李");//创建一个特急消息对象m = new SpecialUrgencyMessage(impl);m.sendMessage("请喝一杯茶", "小李");//把实现方式切换成手机短消息,然后再实现一遍impl = new MessageMobile();m = new CommonMessage(impl);m.sendMessage("请喝一杯茶", "小李");m = new UrgencyMessage(impl);m.sendMessage("请喝一杯茶", "小李");m = new SpecialUrgencyMessage(impl);m.sendMessage("请喝一杯茶", "小李");}
2. 总结
桥接模式的本质:分离抽象和实现,分离抽象部分和实现部分
- 只有把抽象部分和实现部分分离开了,才能够让它们独立地变化;
- 只有抽象部分和实现部分可以独立地变化,系统才会有更好的可扩展性和可维护性。
- 其他的好处:可以动态地切换实现、可以减少子类个数等。
《研磨设计模式》chap24 桥接模式bridge(2)场景应用相关推荐
- 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)
如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...
- 【愚公系列】2021年12月 二十三种设计模式(七)-桥接模式(Bridge Pattern)
文章目录 前言 一.桥接模式(Bridge Pattern) 二.使用步骤 角色 示例 总结 优点 缺点 使用场景 前言 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分 ...
- 《研磨设计模式》chap24 桥接模式bridge(1)基本概念
场景:现有"email"."sms手机消息"两种发送消息方式,要加个是否"紧急消息"的类型区分,如何设计类? 1. 正常编码(不使用模式) ...
- 设计模式之—— 桥接模式 Bridge
定义 将抽象与实现分离,使它们可以独立变化. 他是用 组合关系 代替 继承关系 ,从而降低了抽象和实现两个维度的耦合度. 结构和实现 桥接模式包含以下角色: 抽象化角色:定义抽象类,并包含一个对实现化 ...
- 【设计模式】桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
文章目录 一.桥接模式简介 二.桥接模式适用场景 三.桥接模式优缺点 四.桥接模式相关设计模式 五.桥接模式代码示例 1.视频格式抽象 2.FLV 视频格式实现 3.MP4 视频格式实现 4.系统平台 ...
- 设计模式之桥接模式(Bridge)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
- 设计模式 -- 桥接模式(Bridge)
写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 主要内容包括: 初始桥接 ...
- 设计模式(16):结构型-桥接模式(Bridge)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
最新文章
- AI 技术与人类主体想象 ——基于人工直觉在线讨论的研究
- 如何使用dmidecode命令查看硬件信息
- python系统-python做系统
- quick-cocos2dx在eclipse下的lua调试
- windows7计算机用户账户,win7系统删除用户账户的方法(图文)
- 去除QQ打/之后会出现的表情
- 西北农林科技大学研究生学位论文“参考文献”著录规则
- 基于java自行车租赁管理系统
- cad导出pdf_MxCAD云图DWG转PDF
- php汉字utf8编码转换,PHP UTF8编码内的繁简转换类
- mac 无法删除用户
- Oracle21c 官方文档:数据库概述之数据库体系架构
- 电巢:继腾讯与联通混改后,又有两家企业官宣,科技巨头与国企混改,意味着什么?
- linux notepadqq不支持中文输入的原因分析
- mousemove实现图片鼠标跟随效果
- 证券行情全市场推送解决方案
- 内存碎片产生原因及处理
- 外贸:圣诞新年祝福语语
- crosstool-ng 交叉工具链默认配置 名词解释
- 智能化变电站辅助系统与生产系统结合的未来发展方向
热门文章
- Android --- 调用MediaStore.Images.Media.insertImage保存图片时生成两张图片的问题
- Spring Boot配置嵌入式Servlet容器的两种方法
- 支付签约_与支付巨头万事达卡签约,金融服务集团FlexiGroup股价领涨
- jquery 毫秒转换成日期_基于jQuery的时间戳与日期间的转化
- html怎么设置图片倾斜度,CSS3-css如何使图片倾斜45度显示
- linux下的临时文件在哪,linux – 如何找出创建临时文件的内容
- html pie标签,css3pie怎么用?
- radio按扭设置只读_disabled属性样式问题
- php源代码压缩,PHP_PHP 源代码压缩小工具,使用方法:(在命令行运行) 复 - phpStudy...
- 成功解决Error: Cannot find module 'web3'