`

用接口实现松耦合

阅读更多

其实对于耦合这个概念没有太多的实际经验,只是觉得耦合就是代码之间产生了依赖,比如需要对于一个数据库连接,需要对其事务管理,不同的数据库的事务不同,具体的实现也会不同,比如:

 

MySQLConnection conn = new MySQLConnection();
MySQLTransaction tran = conn.getMySQLTransaction();

tran.commit();

 

 如果这个时候不是用mysql数据库,而是用oracle,代码就全部必须更改,这样,客户端的代码完全依赖于服务器端;

 

OracleConnection conn = new OralceConnection();
OracleTransaction tran = conn.getOracleTransaction();

tran.commit();

 

 对于这种现象,java提供了很好的解决办法就是引用接口概念,将具有一些列相同行为的对象进行抽象,称其接口(interface),从而分离出模块之间的耦合,用上面事务的例子,声明一个Connection接口,封装一个数据库事务对象,这里对于数据库的事务,也采用接口声明,为了区别客户端对于不同数据库的需求,这里在获取连接的时候采用参数构造数据库连接,下面是简单代码:

 

interface Connection{
        public Transaction getTransaction();
}

 

 事务接口:

 

interface Transaction{
        public void commit();
}

 

 MySQL的Connection:

 

public class MySQLConnection implements Connection{
        public Transaction getTransaction(){
                 return new MySQLTransaction();    
        }
}

 

 Oracle的Connection:

 

public class OracleConnection implements Connection{
        public Transaction getTransaction(){
                return new OracleTransaction();
        }
}

 

 具体的事务代码就不写了,反正是对于不同的commit会有不同的实现,现在用简单工厂方法实现从连接池获取连接的ConnectionPool的getConnection():

 

public class ConnectionPool{
        public Connection getConnection(String str){
                if(str == "oracle"){ return new OracleConnection();}
                else if(str == "mysql"){ return new MySQLConnection();}
                else{ System.out.println("there is no Connection");}
        }
}

 

 好了,现在对于在客户端的代码,获取相应的数据库连接,产生对应的事务处理对象,只需要如下代码:

 

Connection conn = ConnectionPool.getConnection("XXX");
Transaction tran = conn.getTransaction();

tran.commit();

 这样,产生需要的数据库连接,及对应的事务处理都不许要重写代码,只需声明需要的数据库名,代码间的耦合状况被松散了。

 

分享到:
评论

相关推荐

    com+松耦合实例

    在COM+中,通过接口和事件驱动机制,我们可以轻松地实现松耦合。 首先,COM+中的接口是定义组件功能的关键,它们定义了组件提供的服务而不涉及其实现细节。这样,客户端可以通过调用接口来使用组件,而无需知道组件...

    强内聚松耦合与测试的关系

    ### 强内聚松耦合的概念与重要性 在软件工程和系统设计领域,强内聚松耦合是两个至关重要的概念,它们不仅对代码质量和系统可维护性有着深远的影响,而且与软件测试密切相关。 #### 强内聚(Strong Cohesion) 强...

    结合几种著名框架使应用达到松耦合

    各层之间的通信通过接口进行,降低了层间依赖,使得修改某一层次的实现时,不会影响到其他层次,从而实现了松耦合。 这种框架组合的优势在于,每个框架专注于自己的领域,减少了代码的冗余和复杂性。例如,Struts...

    基于BREW 的松耦合设计 I

    本文旨在探讨在BREW平台上实现松耦合设计的方法,并通过一个Browser模块的实际案例来展示不同的设计方案及其优缺点。 #### 二、BREW平台简介 BREW是由高通公司开发的一种无线应用平台,它为开发者提供了构建移动...

    JAVA EE Web开发与松耦合实现.pdf

    依赖注入(Dependency Injection,DI)是实现松耦合的关键技术。通过Spring框架的DI容器,可以动态地将必要的对象实例化并注入到需要它们的层中。例如,Spring可以自动管理数据库连接、事务、业务对象等,使得各层只...

    简单的.net接口实现案例

    在.NET框架中,接口是一种定义行为的抽象类型,它规定了...通过接口,我们可以设计出松耦合、易于扩展的系统,从而提高代码的质量和可维护性。在实际开发中,合理地使用接口能够使你的代码更加符合面向对象的设计原则。

    22丨理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”? 1

    依赖注入、接口隔离原则、基于接口而非实现编程以及迪米特法则都是为了实现松耦合而提出的。迪米特法则,又称最小知识原则,主张一个对象应该尽量减少对其他对象的了解,只与其直接相关的对象交互,避免通过第三方...

    net 接口实现,接口定义,接口和类,接口,类

    在.NET编程中,接口...通过接口,开发者可以定义一套规范,使得不同类可以遵循相同的规则,实现了松耦合和模块化的系统设计。理解接口的定义、实现、与类的区别及其使用场景,对于提升.NET开发能力至关重要。

    松耦合无界零售系统搭建和微服务实战.pptx

    而微服务架构则为DDD提供了一种实现松耦合设计的可行路径。这种结合不仅保证了业务逻辑的一致性和完整性,还允许系统各部分独立进化,对业务变化做出快速响应。 在系统架构中,限界上下文的划分至关重要,每个上...

    行业制造-标准-无线局域网WLAN与cdma2000系统互通技术要求 松耦合实现方式.zip

    《行业制造-标准-无线局域网WLAN与cdma2000系统互通技术要求 松耦合实现方式》是一份重要的技术文档,主要探讨了在无线通信领域中,如何实现WLAN(Wireless Local Area Network)和cdma2000系统的互操作性,特别是...

    类的组合和接口的实现

    - **松耦合**:改变或扩展组件类不会影响组合它的类。 - **增强可读性**:将复杂逻辑分散到更小、更专注的类中,使得代码更容易理解。 2. **接口(Interface)** 接口在Java中是一种完全抽象的类型,它只包含...

    基于Java注释(不是注解)生成接口文档的框架与工具,与你的代码没有任何交集,松耦合.zip

    本资源“基于Java注释(不是注解)生成接口文档的框架与工具”提供了一种方法,利用Java源代码中的注释信息自动生成接口文档,这种方法与代码逻辑本身保持松耦合,不会直接修改或影响到实际的业务逻辑。 首先,我们...

    利用ansysworkbench流固 耦合的实现

    - **松耦合方式**:通过交换耦合边界的耦合量来实现双向耦合,即所谓的非耦合方程方式求解。这种方式适用于耦合效应不是特别强烈的情况。 #### 工具与技术 1. **MPCCI**:Mesh-based Parallel Code Coupling ...

    基于BREW 的松耦合设计 III

    ### 基于BREW平台的松耦合设计——可移植与可复用软件的设计原则 #### 一、概述 本文旨在深入探讨基于BREW平台的软件开发中,如何通过有效的设计策略实现软件的可移植性和可复用性。BREW(Binary Runtime ...

    基于接口的分层实现

    接口在此类架构中扮演着至关重要的角色,因为它定义了各层之间的契约,确保了松耦合。本文将深入探讨基于接口的分层实现及其在实际开发中的应用。 首先,我们来理解什么是分层架构。通常,一个典型的分层架构包括...

    java Spring松耦合高效应用简单实例分析

    Spring框架通过其IoC(Inversion of Control)或依赖注入(Dependency Injection)机制帮助实现松耦合。在IoC中,Spring容器负责创建对象并管理它们之间的依赖关系,而不是由对象自己管理。这样,对象只需要声明它们...

    创建接口的 Java 程序.docx

    * 实现松耦合。 * 实现抽象。 Java 接口与抽象类的区别 * 抽象类可能包含非最终变量,而接口中的变量是最终的、公共的和静态的。 * 抽象类可以包含具体的(带有实现)方法,接口不能包含具体的(带有实现)方法...

    面向接口编程而不是面向实现编程

    通过以上步骤,我们可以构建出一个松耦合、易于维护和扩展的系统。在Java、C#等支持接口的语言中,面向接口编程是常见的最佳实践。而在Python等语言中,虽然没有内置的接口概念,但可以通过约定或抽象基类来达到类似...

    android调用webservice接口实现登陆源码

    2. Web Service:一种基于网络的、松耦合的软件模块,用于跨平台数据交换。 3. SOAP(Simple Object Access Protocol):一种基于XML的协议,用于交换结构化和类型化的信息,常用于Web Service。 4. REST...

Global site tag (gtag.js) - Google Analytics