桥接模式

概述:将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化.如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构.
    应用场景
        实现系统可能有多个角度分类,每一种角度都可能变化.
    解释:桥接模式将继承模式转化成关联关系,他降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量.
    理解抽象化,实现化,解耦
        抽象化:将复杂物体的一个或几个共同的特性抽出去而只注意其他特性的行动或过程.在java面向对象中抽象化就是将对象的共同性质抽取出去形成类的过程.
        实现化:针对抽象化给出的具体实现,它和抽象化是一个互逆的过程,实现化是对抽象化事物的进一步具体化.
        解耦:解耦是将抽象化和实现化之间的耦合关系解脱开,或者说是将他们之间的强关联改换成弱关联.将两个角色之间的继承关系修改为关联关系.
    优点
        分离抽象接口及其实现部分.提高了比继承更好的解决方案.
        桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原来的系统.
        实现细节对客户不透明,可以隐藏实现细节.
    缺点
        桥接模式的引入会增加系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行编程.

代码实现
     示例:在开发中可能不止使用一种数据库, 例如Mysql,SqlServer数据库等,现在使用桥接模式创建一个连接数据库的驱动,然后对每一个数据库提供各自的实现.对于使用某一个数据库的时候只需要切换一下就行.

类图

数据库接口

package Bridge;
     
    /**
     * Created by looper on 2017/8/16.
     */
    public interface Driver {
      public void connect();
    }

Mysql数据库实现类

package Bridge;
     
    /**
     * Created by looper on 2017/8/16.
     */
    public class MysqlDriver implements Driver {
      @Override
      public void connect() {
        System.out.println("连接Mysql数据库");
      }
    }

SqlServer数据库实现类

package Bridge;
     
    /**
     * Created by looper on 2017/8/16.
     */
    public class SqlServerDriver implements Driver {
      @Override
      public void connect() {
        System.out.println("连接SQLServer数据库");
      }
    }

桥梁类(抽象类)

package Bridge;
     
    /**
     * Created by looper on 2017/8/16.
     */
    public abstract class Bridge {
      private Driver driver;
     
      public void connect(){
        driver.connect();
      }
     
      public void setDriver(Driver driverTemp){
        this.driver = driverTemp;
      }
     
      public Driver getDriver(){
        return this.driver;
      }
    }

桥梁类(实现类)

package Bridge;
     
    /**
     * Created by looper on 2017/8/16.
     */
    public class MyBridge extends Bridge {
     
    }

测试类

package Bridge;
     
    /**
     * Created by looper on 2017/8/16.
     */
    public class BridgeTest {
      public static void main(String[] args) {
        Bridge mysqlBridge = new MyBridge();
     
        Driver mysqlDriver = new MysqlDriver();
        mysqlBridge.setDriver(mysqlDriver);
        mysqlBridge.connect();
     
        Driver sqlServerDriver = new SqlServerDriver();
        mysqlBridge.setDriver(sqlServerDriver);
        mysqlBridge.connect();
     
      }
    }

输出:

我将23种设计模式的全部代码上传到CSDN,有用得到的同学 可以去下载.

下载地址 : 点我
---------------------
作者:叶孤心丶
来源:CSDN
原文:https://blog.csdn.net/yeguxin/article/details/77337838
版权声明:本文为博主原创文章,转载请附上博文链接!

JAVA开发的23种设计模式之 --- 桥接模式的更多相关文章

  1. 【Unity3D与23种设计模式】桥接模式(Bridge)

    GoF定义: "将抽象与实现分离,使二者可以独立的变化" 游戏中,经常有这么一种情况 基类角色类(ICharacter),下面有子类士兵类(ISoldier).敌军类(IEnemy ...

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

    桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式.桥接模式类似于多重继承方案,但是 ...

  3. java的23种设计模式之建造者模式

    场景和本质 场景 本质 案例 原理 应用场景 场景和本质 场景 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样一个问题需要处理:装配这些子组件是不是有个步骤问题? ...

  4. 实践GoF的23种设计模式:建造者模式

    摘要:针对这种对象成员较多,创建对象逻辑较为繁琐的场景,非常适合使用建造者模式来进行优化. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简 ...

  5. Java编程的23种设计模式

    设计模式(Design Patterns)                                   --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用. ...

  6. JAVA中的23种设计模式

    http://blog.csdn.net/chmask/article/details/2631485 http://www.cnblogs.com/hnrainll/archive/2011/12/ ...

  7. Java经典23种设计模式之创造型模式(一)

    设计模式被称为程序猿的内功,之前零零散散的看过一大部分,但自己么有总结过.故此次在这里总结下.值得一提的是,设计模式并不是Java所特有.由于一直搞Android.这里就用Java为载体.最经典的设计 ...

  8. 浅析Java中的23种设计模式

    前言 设计模式不论是在我们学习编程,还是在工作和面试过程中,都会涉及到的一个问题,所以了解和学习好设计模式,是我们每一位码农必须要具备的技能,对以后的发展和自己技能的提升都有好处. 什么是设计模式(D ...

  9. Java中的23种设计模式与7大原则

    一.创建型模式 1.抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类.2.生成器模式(Builder patter ...

随机推荐

  1. [POST] What Is the Linux fstab File, and How Does It Work?

    If you’re running Linux, then it’s likely that you’ve needed to change some options for your file sy ...

  2. 设置cnblogs默认滚动条样式

    默认滚动条样式丑嘛就不谈了~这里修改为个性化滚动条样式. CSS代码 /*滚动条整体样式*/ body::-webkit-scrollbar { width: 10px; height: 1px; } ...

  3. NYOJ----蛇形填数

    蛇形填数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 12 1 9 16 ...

  4. sqlite元数据

    sqlite数据库每个文件都是一个database,因此同一个文件内部不再划分database.sqlite没有提供像mysql那样的show tables;和desc 表名类似的语句.许多数据库的元 ...

  5. suricata 的安装编译

    最近打算研究suricata源码,下载并安装了稳定版3.2.3版本,操作系统是Ubuntu 16.04.2 LTS,下来描述我的操作过程: 1,安装suricata运行可能用到的库: sudo apt ...

  6. [转]expect实现ssh自动交互

    shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194 expect "*password:&quo ...

  7. 蓝牙进阶之路 (001) - HC-05蓝牙无线模块设置

    USB转串口的有线转接方式,实在太难看了,尤其是寻接头,那是相当的不方便.其它电器厂商都想把是接头做小,做精致,唯独串口接头还是那么庞大,感觉应该换一换了,都已经完全不符合这个时代的审美观了. 于是, ...

  8. java播放wav文件

    import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFormat; import java ...

  9. Android调用系统软键盘

    /** * * @MethodName:closeInputMethod * @Description:关闭系统软键盘 * @throws */ public void closeInputMetho ...

  10. [转]Jackson 解析json数据之忽略解析字段注解@JsonIgnoreProperties

    以前解析json用的惯的就是Google的gson了,用惯了基本就用它了,一直也没发现什么大问题,因为都是解析简单的json数据.但是最近学习springboot,要解析一个比较复杂的json数据.就 ...