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)场景应用相关推荐

  1. 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

    如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...

  2. 【愚公系列】2021年12月 二十三种设计模式(七)-桥接模式(Bridge Pattern)

    文章目录 前言 一.桥接模式(Bridge Pattern) 二.使用步骤 角色 示例 总结 优点 缺点 使用场景 前言 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分 ...

  3. 《研磨设计模式》chap24 桥接模式bridge(1)基本概念

    场景:现有"email"."sms手机消息"两种发送消息方式,要加个是否"紧急消息"的类型区分,如何设计类? 1. 正常编码(不使用模式) ...

  4. 设计模式之—— 桥接模式 Bridge

    定义 将抽象与实现分离,使它们可以独立变化. 他是用 组合关系 代替 继承关系 ,从而降低了抽象和实现两个维度的耦合度. 结构和实现 桥接模式包含以下角色: 抽象化角色:定义抽象类,并包含一个对实现化 ...

  5. 【设计模式】桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.桥接模式简介 二.桥接模式适用场景 三.桥接模式优缺点 四.桥接模式相关设计模式 五.桥接模式代码示例 1.视频格式抽象 2.FLV 视频格式实现 3.MP4 视频格式实现 4.系统平台 ...

  6. 设计模式之桥接模式(Bridge)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  7. 设计模式 -- 桥接模式(Bridge)

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 主要内容包括: 初始桥接 ...

  8. 设计模式(16):结构型-桥接模式(Bridge)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  9. 【设计模式自习室】桥接模式 Bridge Pattern:处理多维度变化

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

最新文章

  1. AI 技术与人类主体想象 ——基于人工直觉在线讨论的研究
  2. 如何使用dmidecode命令查看硬件信息
  3. python系统-python做系统
  4. quick-cocos2dx在eclipse下的lua调试
  5. windows7计算机用户账户,win7系统删除用户账户的方法(图文)
  6. 去除QQ打/之后会出现的表情
  7. 西北农林科技大学研究生学位论文“参考文献”著录规则
  8. 基于java自行车租赁管理系统
  9. cad导出pdf_MxCAD云图DWG转PDF
  10. php汉字utf8编码转换,PHP UTF8编码内的繁简转换类
  11. mac 无法删除用户
  12. Oracle21c 官方文档:数据库概述之数据库体系架构
  13. 电巢:继腾讯与联通混改后,又有两家企业官宣,科技巨头与国企混改,意味着什么?
  14. linux notepadqq不支持中文输入的原因分析
  15. mousemove实现图片鼠标跟随效果
  16. 证券行情全市场推送解决方案
  17. 内存碎片产生原因及处理
  18. 外贸:圣诞新年祝福语语
  19. crosstool-ng 交叉工具链默认配置 名词解释
  20. 智能化变电站辅助系统与生产系统结合的未来发展方向

热门文章

  1. Android --- 调用MediaStore.Images.Media.insertImage保存图片时生成两张图片的问题
  2. Spring Boot配置嵌入式Servlet容器的两种方法
  3. 支付签约_与支付巨头万事达卡签约,金融服务集团FlexiGroup股价领涨
  4. jquery 毫秒转换成日期_基于jQuery的时间戳与日期间的转化
  5. html怎么设置图片倾斜度,CSS3-css如何使图片倾斜45度显示
  6. linux下的临时文件在哪,linux – 如何找出创建临时文件的内容
  7. html pie标签,css3pie怎么用?
  8. radio按扭设置只读_disabled属性样式问题
  9. php源代码压缩,PHP_PHP 源代码压缩小工具,使用方法:(在命令行运行) 复 - phpStudy...
  10. 成功解决Error: Cannot find module 'web3'