Abstraction:抽象部分的父类,定义须要实现的接口。维护对实现部分的引用,从而把实现桥接到Implementor中去

Implementor:实现部分的接口

RefinedAbstraction:扩展抽象部分的接口

ConcreteImplementorA/B:真正实现Implementor接口的对象

  1. //桥接模式定义:将抽象部分与它的实现部分分离,使得他们都能够独立地变化。抽象部分仅仅定义出须要实现什么方法(非抽象方法),相当于仅仅给出一个方法的接口。接口中去调用桥接过来的详细实现类去实现,从而实现灵活的扩展性
  2. //广义来讲。桥接模式很普遍。面向抽象编程,面向接口编程就能够看作是他的体现
  3. //实例:一个系统,要依照不同的要求发信息(普通,加急,特急),并且还要以不同的方式发送(站内信,Email。短信)等。考虑到其扩展性,用桥接模式再合适只是了
  4. //上代码
  5. //桥接的一半---抽象部分
  6. public abstract class AbstractionMessage {
  7. protected MessageImplementor impl;
  8. public AbstractMessage(MessageImplementor impl) {
  9. this.impl = impl;
  10. }
  11. public void sendMessage(String message, String toUser) {
  12. this.impl.send(message, toUser);
  13. }
  14. }
  15. //发送消息的统一接口。即桥接的还有一半---实现的接口
  16. public interface MessageImplementor {
  17. public void send(String message, String toUser);
  18. }
  19. //桥接的还有一半---实现
  20. public class MessageSMS implements MessageImplementor {
  21. public void send(String message,String toUser) {
  22. System.out.println("使用站内信方式。发送消息'"+message+"'给"+toUser);
  23. }
  24. }
  25. //桥接的还有一半---实现
  26. public class MessageEmail implements MessageImplementor {
  27. public void send(String message,String toUser) {
  28. System.out.println("使用邮件方式,发送消息'"+message+"'给"+toUser);
  29. }
  30. }
  31. //普通消息
  32. public class CommonMessage extends AbstractionMessage {
  33. public CommonMessage(MessageImplementor impl) {
  34. super(impl);
  35. }
  36. public void sendMessage(String message, String toUser) {
  37. super.sendMessage(message, toUser);
  38. }
  39. }
  40. //加急消息
  41. public class UrgencyMessage extends AbstractionMessage {
  42. public UrgencyMessage(MessageImplementor impl) {
  43. super(impl);
  44. }
  45. public void sendMessage(String message, String toUser) {
  46. super.sendMessage(message, toUser);
  47. }
  48. public Object watch(String messageId) {
  49. return null;//获取对应的数据,组织成监控的对象,然后返回
  50. }
  51. }
  52. //client測试类
  53. public class Client {
  54. public static void main(String[] args) {
  55. MessageImplementor impl = new MessageSMS();
  56. AbstractionMessage m = new CommonMessage(impl);
  57. m.sendMessage("測试", "小李");
  58.  
  59. MessageImplementor impl2 = new MessageEmail();
  60. AbstractionMessage m2 = new UrgencyMesssage(impl2);
  61. m2.sendMessage("測试", "小李");
  62. }
  63. }
  64. //从client的调用能够看出来,无论是要添加消息类型还是发送消息的方式,全然是件很easy的事情,由于没有耦合,扩展起来很轻松。
  65. //关于谁来桥接
  66. //1.由抽象部分的对象自己来创建对应的Implementor对象,依据參数推断详细创建哪个
  67. //2.在Abstraction中创建默认的Implementor对象。假设须要。让子类来改动
  68. //3.使用抽象工厂或简单工厂
  69. //4.使用IoC/DI方式
  70. //Java中的JDBC就是很典型的桥接应用
  71. //桥接模式的本质:分离抽象和实现
  72. //桥接模式很好地提现了开闭原则OCP
  73. //长处:
  74. //1.分离抽象和实现部分
  75. //2.更好的扩展性
  76. //3.可动态地切换实现
  77. //4.降低子类的个数
  78. //使用桥接模式的场景
  79. //1.假设你不希望在抽象部分和实现部分採用固定的绑定关系,能够採用桥接模式
  80. //2.假设出现抽象部分和实现部分都能够扩展的情况,能够採用桥接模式
  81. //3.假设希望实现部分的改动不会对客户产生影响。能够採用桥接模式
  82. //4.假设採用继承的实现方案,会导致产生许多子类。对于这样的情况。也可採取桥接模式

设计模式入门之桥接模式Bridge的更多相关文章

  1. Net设计模式实例之桥接模式( Bridge Pattern)

    一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...

  2. 设计模式学习心得<桥接模式 Bridge>

    说真的在此之前,几乎没有对于桥接模式的应用场景概念. 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来 ...

  3. IOS设计模式浅析之桥接模式(Bridge)

    引言 在项目开发中,我们会遇到这样的一种场景:某些类型由于自身的逻辑,往往具有两个或多个维度的变化,比如说大话设计模式书中所说的手机,它有两个变化的维度:一是手机的品牌,可能有三星.苹果等:二是手机上 ...

  4. 《JAVA设计模式》之桥接模式(Bridge)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...

  5. 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

    原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...

  6. 【设计模式】桥接模式 Bridge Pattern

    开篇还是引用吕振宇老师的那篇经典的文章<设计模式随笔-蜡笔与毛笔的故事>.这个真是太经典了,没有比这个例子能更好的阐明桥接模式了,这里我就直接盗来用了. 现在市面上卖的蜡笔很多,各种型号, ...

  7. python 设计模式之桥接模式 Bridge Pattern

    #写在前面 前面写了那么设计模式了,有没有觉得有些模式之间很类似,甚至感觉作用重叠了,模式并不是完全隔离和独立的,有的模式内部其实用到了其他模式的技术,但是又有自己的创新点,如果一味地认为每个模式都是 ...

  8. 二十四种设计模式:桥接模式(Bridge Pattern)

    桥接模式(Bridge Pattern) 介绍将抽象部分与它的实现部分分离,使它们都可以独立地变化. 示例有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象 ...

  9. 桥接模式(Bridge Pattern)

    1,定义           桥接模式(Bridge Pattern),也称为桥梁模式,其用意是将抽象化与实现化脱耦,使得两者可以独立的变化,它可以使软件系统沿着多个方向进行变化,而又不引入额外的复杂 ...

随机推荐

  1. python 日期、时间戳转换

    获取当前日期: from datetime import datetime IN:datetime.now() OUT:datetime(2016,10,19,6,51,21,72341) 转化为字符 ...

  2. 图的邻接链表实现(c)

    参考:算法:C语言实现 一书 实现: #ifndef GRAPH #define GRAPH #include<stdio.h> #include<stdlib.h> stru ...

  3. VUE.JS组件化

    VUE.JS组件化 前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了下面的内容.借油开车. 组件化 需求一到,接就是怎 ...

  4. C++中实现链表的删除和颠倒

    MFC工程中关于链表的操作 1.对于给定的整数n,编写算法删除链表中第n个节点,该链表的第一个节点由first指向. 由于C++中没有关于node的标准头文件,要先手动定义node类,此处只定义了简单 ...

  5. Ubuntu 下开发环境的常规配置。

    Install Chinese input (for Chinese peers) We Choose the Sougou pinying.(搜狗) $ sudo apt-get install g ...

  6. oracle定时执行计划任务

    show parameter job_queue_processes; alter system set job_queue_processes=10; 1,创建测试表 create table jo ...

  7. android开发利器--站在巨人肩膀上前行

    本文主要介绍有助于android开发的三方平台和站点. 一:开发阶段 1:SVN(一个开放源码的版本号控制系统) 团队开发没有server,代码管理就没那么方便了,推荐taocode阿里开源站点,方便 ...

  8. 深入理解Linux网络技术内幕——中断与网络驱动程序

    接收到帧时通知驱动程序     在网络环境中.设备(网卡)接收到一个数据帧时,须要通知驱动程序进行处理. 有一下几种通知机制: 轮询:     内核不断检查设备是否有话要说.(比較耗资源,但在一些情况 ...

  9. gridview合并相同的行

    #region 方法:合并Gridview行    /// <summary>    /// 合并GridView指定行单元格    /// </summary>    /// ...

  10. 关于html5之canvas的那些事

    何为canvas <canvas> 标签只是图形容器,您必须使用脚本来绘制图形.默认情况下该矩形区域宽为300像素,高为150像素,设置宽高必须在canvas标签内部,不能加单位px. 大 ...