zoukankan      html  css  js  c++  java
  • 设计模式之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接口修改就可以.

    clip_image002

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

    转自:http://www.jdon.com 板桥里人

  • 相关阅读:
    10 种保护 Spring Boot 应用的绝佳方法
    Redis 如何分析慢查询操作?
    Spring Boot 主类及目录结构介绍
    Redis 再牛逼,也得设置密码!!
    Spring Data Redis 详解及实战一文搞定
    Spring Boot Redis Cluster 实战干货
    超详细的 Redis Cluster 官方集群搭建指南
    Redis Linux 安装运行实战全记录
    hdu 4790 Just Random (思路+分类计算+数学)
    poj 1328 Radar Installation(贪心)
  • 原文地址:https://www.cnblogs.com/alfredinchange/p/5346609.html
Copyright © 2011-2022 走看看