zoukankan      html  css  js  c++  java
  • 设计模式之桥接模式

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

        举个例子现在我们需要使用不同的编程语言来连接不同的数据库。现在可以使用的编程语言分别为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的数据库连接

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

  • 相关阅读:
    poj 3122 (二分查找)
    poj 1064 (二分+控制精度) && hdu 1551
    hdu 2199 (二分)
    hdu 2141 (二分)
    poj 2954 Triangle(Pick定理)
    poj 1265 Area (Pick定理+求面积)
    hdu 4946 Just a Joke(数学+物理)
    zoj 1199 几何公式推导
    MMORGP大型游戏设计与开发(客户端架构 part13 of vegine)
    MMORPG大型游戏设计与开发(客户端架构 part12 of vegine)
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10352293.html
Copyright © 2011-2022 走看看