Java设计模式之外观模式(Facade模式)介绍

 更新时间:2015年03月11日 09:54:29   投稿:junjie  
这篇文章主要介绍了Java设计模式之外观模式(Facade模式)介绍,外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,需要的朋友可以参考下

外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面。

Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作:

复制代码 代码如下:

public class DBCompare {
 Connection conn = null;
 PreparedStatement prep = null;
 ResultSet rset = null;
 try {
  Class.forName( "<driver>" ).newInstance();
  conn = DriverManager.getConnection( "<database>" );
    
  String sql = "SELECT * FROM <table> WHERE <column name> = ?";
  prep = conn.prepareStatement( sql );
     prep.setString( 1, "<column value>" );
  rset = prep.executeQuery();
  if( rset.next() ) {
    System.out.println( rset.getString( "<column name" ) );
  }
 } catch( SException e ) {
  e.printStackTrace();
 } finally {
  rset.close();
  prep.close();
  conn.close();
 }
}

上例是Jsp中最通常的对数据库操作办法。

在应用中,经常需要对数据库操作,每次都写上述一段代码肯定比较麻烦,需要将其中不变的部分提炼出来,做成一个接口,这就引入了facade外观对象。如果以后我们更换Class.forName中的<driver>也非常方便,比如从Mysql数据库换到Oracle数据库,只要更换facade接口中的driver就可以。

我们做成了一个Facade接口,使用该接口,上例中的程序就可以更改如下:

复制代码 代码如下:

public class DBCompare {
 String sql = "SELECT * FROM <table> WHERE <column name> = ?";  
 try {
  Mysql msql=new mysql(sql);
  prep.setString( 1, "<column value>" );
  rset = prep.executeQuery();
  if( rset.next() ) {
   System.out.println( rset.getString( "<column name" ) );
  }
 } catch( SException e ) {
  e.printStackTrace();
 } finally {
  mysql.close();
  mysql=null;
 }
}

可见非常简单,所有程序对数据库访问都是使用改接口,降低系统的复杂性,增加了灵活性。

如果我们要使用连接池,也只要针对facade接口修改就可以。

由上图可以看出,facade实际上是个理顺系统间关系,降低系统间耦合度的一个常用的办法,也许你已经不知不觉在使用,尽管不知道它就是facade。

相关文章

  • spring*.xml配置文件明文加密的实现

    spring*.xml配置文件明文加密的实现

    这篇文章主要介绍了spring*.xml配置文件明文加密的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • java项目新建遇到的两个问题解决

    java项目新建遇到的两个问题解决

    创建一个新的Java项目可以通过多种方式进行,包括使用集成开发环境(IDE)或手动创建,下面这篇文章主要给大家介绍了关于java项目新建遇到的两个问题,需要的朋友可以参考下
    2024-06-06
  • spring boot对敏感信息进行加解密的项目实现

    spring boot对敏感信息进行加解密的项目实现

    本文主要介绍了spring boot对敏感信息进行加解密的项目实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • SpringBoot启动时自动执行sql脚本的方法步骤

    SpringBoot启动时自动执行sql脚本的方法步骤

    本文主要介绍了SpringBoot启动时自动执行sql脚本的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java中的关键字synchronized 详解

    Java中的关键字synchronized 详解

    这篇文章主要介绍了Java中的关键字synchronized,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java实现扫雷游戏详细代码讲解

    Java实现扫雷游戏详细代码讲解

    windows自带的游戏《扫雷》是陪伴了无数人的经典游戏,本文将利用Java语言实现这一经典的游戏,文中的示例代码讲解详细,感兴趣的可以学习一下
    2022-05-05
  • java使用minio上传下载文件完整版教程

    java使用minio上传下载文件完整版教程

    本示例教程介绍了如何使用SpringBoot框架结合MinIO服务实现文件的上传和下载功能,并将文件信息存储在数据库的file表中,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • 使用Spring Boot的LoggersEndpoint管理日志级别

    使用Spring Boot的LoggersEndpoint管理日志级别

    这篇文章主要为大家介绍了使用Spring Boot的LoggersEndpoint管理日志级别,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Jackson库中objectMapper的用法

    Jackson库中objectMapper的用法

    这篇文章主要介绍了Jackson库中objectMapper的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 浅析Java中comparator接口与Comparable接口的区别

    浅析Java中comparator接口与Comparable接口的区别

    本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧
    2016-10-10

最新评论