Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>设计模式>>设计模式袖珍版nbsp;连续转载之nbsp;-nbsp;Facade(外观)
设计模式袖珍版nbsp;连续转载之nbsp;-nbsp;Facade(外观)
2007-04-13   来源:www.javaresearch.org  作者:未知

原作:fanix

Facade的定义: 为子系统中的一组接口提供一个一致的界面.

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

  1. public class DBCompare {
  2.   Connection conn = null;
  3.   PreparedStatement prep = null;
  4.   ResultSet rset = null
  5.   try {
  6.      Class.forName( "<driver>" ).newInstance();
  7.      conn = DriverManager.getConnection( "<database>" );
  8.     
  9.      String sql = "SELECT * FROM <table> WHERE <column name> = ?";
  10.      prep = conn.prepareStatement( sql );
  11.      prep.setString( 1, "<column value>" );
  12.      rset = prep.executeQuery();
  13.      if( rset.next() ) {
  14.         System.out.println( rset.getString( "<column name" ) );
  15.      }
  16.   } catch( SException e ) {
  17.      e.printStackTrace();
  18.   } finally {
  19.      rset.close();
  20.      prep.close();
  21.      conn.close();
  22.   }
  23. }


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

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

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

  1. public class DBCompare {
  2.   String sql = "SELECT * FROM <table> WHERE <column name> = ?";  
  3.   try {
  4.      Mysql msql=new mysql(sql);
  5.      prep.setString( 1, "<column value>" );
  6.      rset = prep.executeQuery();
  7.      if( rset.next() ) {
  8.         System.out.println( rset.getString( "<column name" ) );
  9.      }
  10.   } catch( SException e ) {
  11.      e.printStackTrace();
  12.   } finally {
  13.      mysql.close();
  14.      mysql=null;
  15.   }
  16. }

 

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

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



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

  --相关文章--
· 面向对象编程,我的思想 (2007-04-13)
· 面向对象的思维方式 (2007-04-13)
· 通过Javanbsp;Swing看透MVC设计模式 (2007-04-13)
· 适配器模式(Adapternbsp;Pattern) (2007-04-13)
· 追MM与Java的23种设计模式 (2007-04-13)
· 责任链模式(Chainnbsp;ofnbsp;Responsibility) (2007-04-13)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接