博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之桥接模式
阅读量:6152 次
发布时间:2019-06-21

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

    桥接模式不是一个使用频率很高的设计模式,但是它非常好的体现了开闭原则和合成/聚合复用原则。所谓合成/聚合复用原则指的是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。使用合成/聚合复用原则可以使系统更加的灵活,降低系统间各个模块的耦合。桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化。

    举个例子现在我们需要使用不同的编程语言来连接不同的数据库。现在可以使用的编程语言分别为php、java、python;数据库分别为Mysql、Oracle、SQL server。首先定义一个获取数据库连接的接口和几个具体数据库的实现。

public interface DbConnection {     public void getConnection();}
public class MysqlConnection implements DbConnection{    public void getConnection() {        System.out.println("获取mysql的数据库连接");    }}public class OracleConnection implements DbConnection{    public void getConnection() {        System.out.println("获取oracle的数据库连接");    }}

定义一个语言的抽象类,包含一个数据库连接对象的引用。

public abstract class Language {    protected  DbConnection connection;    protected  Language(DbConnection connection) {        this.connection = connection;    }        public abstract void useLanguage();}

使用具体的语言来继承语言的抽象类:

public class JavaConnection extends Language{    protected JavaConnection(DbConnection connection) {        super(connection);    }    @Override    public void useLanguage() {        System.out.println("使用java");        connection.getConnection();    }}

客户端调用:

public static void main(String[] args) {        Language language = new JavaConnection(new MysqlConnection());        language.useLanguage();    }执行结果:使用java获取mysql的数据库连接

现在我们可以轻松的使用不同的语言来连接不同的数据库。使用桥接模式,将继承关系转化成关联关系,它降低了类与类之间的耦合度,提高了系统的灵活性。

 

转载于:https://www.cnblogs.com/suyang-java/p/10352293.html

你可能感兴趣的文章
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
mysql内存优化
查看>>
都市求生日记第一篇
查看>>
Java集合---HashMap源码剖析
查看>>
SQL优化技巧
查看>>
thead 固定,tbody 超出滚动(附带改变滚动条样式)
查看>>
Dijkstra算法
查看>>
css 动画 和 响应式布局和兼容性
查看>>
csrf 跨站请求伪造相关以及django的中间件
查看>>
MySQL数据类型--与MySQL零距离接触2-11MySQL自动编号
查看>>
生日小助手源码运行的步骤
查看>>
Configuration python CGI in XAMPP in win-7
查看>>
bzoj 5006(洛谷 4547) [THUWC2017]Bipartite 随机二分图——期望DP
查看>>
CF 888E Maximum Subsequence——折半搜索
查看>>
欧几里德算法(辗转相除法)
查看>>
面试题1-----SVM和LR的异同
查看>>
MFC控件的SubclassDlgItem
查看>>