博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java经典设计模式-结构型模式-桥接模式(Bridge)
阅读量:7020 次
发布时间:2019-06-28

本文共 2115 字,大约阅读时间需要 7 分钟。

hot3.png

桥接模式

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。

在提出桥梁模式的时候指出,桥梁模式的用意是”将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。这句话有三个关键词,也就是抽象化、实现化和脱耦。

抽象化:存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待。

实现化:抽象化给出的具体实现,就是实现化。
脱耦:所谓耦合,就是两个实体的行为的某种强关联。而将它们的强关联去掉,就是耦合的解脱,或称脱耦。在这里,脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。

下面我们来看看代码实例:

package com.model.structure; public interface Driver {      public void connect();  }
package com.model.structure; public class MysqlDriver implements Driver {     @Override    public void connect() {        System.out.println("connect mysql done!");    }}
package com.model.structure; public class DB2Driver implements Driver {     @Override    public void connect() {        System.out.println("connect db2 done!");    }}
package com.model.structure; public abstract class DriverManager {     private Driver driver;     public void connect() {        driver.connect();    }     public Driver getDriver() {        return driver;    }     public void setDriver(Driver driver) {        this.driver = driver;    } }
package com.model.structure; public class MyDriverManager extends DriverManager {     public void connect() {        super.connect();    } }
package com.model.structure; public class Client {     public static void main(String[] args) {         DriverManager driverManager = new MyDriverManager();        Driver driver1 = new MysqlDriver();        driverManager.setDriver(driver1);        driverManager.connect();         Driver driver2 = new DB2Driver();        driverManager.setDriver(driver2);        driverManager.connect();     }}

165508_Ye4O_616187.png

如果看完代码实例还不是很理解,我们想想如下两个维度扩展:(1)假设我想加一个OracleDriver,这是一个维度,很好理解,不多解释。(2)假设我们想在连接前后固定输出点什么,我们只需要加一个MyDriverManager2,代码如下:

package com.model.structure; public class MyDriverManager2 extends DriverManager {     public void connect() {        System.out.println("before connect");        super.connect();        System.out.println("after connect");    } }

再将Client代码中的MyDriverManager 改成 MyDriverManager2 ,执行结果如下:

转载于:https://my.oschina.net/idea813/blog/1610067

你可能感兴趣的文章
Spring data jpa 分页技术
查看>>
squid简单配置
查看>>
学习Xfire的一些体会
查看>>
python常用模块详解
查看>>
hadoop安装搭建过程中遇到的问题与解决方案
查看>>
ubuntu-16.04.1-server-amd64安装时提示busybox-initramfs软件包错误
查看>>
基本套接字tcp/udp
查看>>
我的友情链接
查看>>
一些思想
查看>>
谷歌明确Fuchsia并非基于Linux内核
查看>>
java关于安卓,苹果输入表情数据库处理
查看>>
c/c++ 中的文件路径表示
查看>>
Java实现二叉树的深度计算
查看>>
Citrix NetScaler的推荐版本
查看>>
快速搭建一个物化视图环境
查看>>
使用docker-compose定制Javaweb环境
查看>>
Android模拟器快捷键大全
查看>>
MooTools源代码导读
查看>>
cogs——7. 通信线路
查看>>
负载均衡集群解决方案 (二)Nginx
查看>>