`
行者买刀
  • 浏览: 191275 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

设计模式之略见一斑(外观模式Facade)

    博客分类:
  • J2SE
阅读更多

外观模式又称门面模式,它是为了给子系统中提供一个一致的界面,从面定义了一个高层接口 ,这个接口使得这一子系统更加容易使用。定义中提到的子系统指在设计中为了降低复杂性根据一定的规则,对系统进行的划分,子系统封装有一些类,客户程序在使用子系统的时候,可能会像下图一样零乱。


 上面的实现中,客户紧紧依赖在子系统的实现,如果子系统发生了变化,极有可能响应到客户类的调用,而且在子系统在不断优化时会产生更多的小类。

  外观模式就是为了解决这种问题而产生的,下面是使用了门用模式后的图



 这样就明显减少了客户程序和子系统之间的偶合,增加了可维护性。

 

例子:

  数据库连接这个例子在我们日常中很常用,在用JSP做页面开发的时候,我们经常会用到连接数据库,很多初学者都是直接用下面的代码(直接连接数据库,然后获得连接后直接进行增删改查)

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();
  }
}

 

但是这样的代码很有弊端,如我们如果想要换个数据库,这个时候就要大量改动代码

为了避免这种情况,我们就可以把获得连接抽象出来,从而在每次需要对数据库进行操作的时候,只需要获得连接。甚至也可以建立一个连接池。

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;
  }
}

 

优点:

1)对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便

2)它实现了子系统与客户之间在的耦合关系,而子系统内部的功能组件往往是紧耦合的,松耦合关系使得子系统的组件变化不会影响到它的客户,facad模式有助于建立层次结构系统,也有助于对对象之间原依赖关系分层,facade模式可以消除复杂的循环依赖关系。这一点在客户程序与子系统是分别实现的时候极为重要。

 
 

  • 大小: 14.1 KB
  • 大小: 14.7 KB
分享到:
评论
1 楼 bo_hai 2011-02-16  
JAVA程序没有讲明白这种设计模式。

相关推荐

    设计模式之略见一斑(Observer观察者模式)

    NULL 博文链接:https://lgh3292.iteye.com/blog/600905

    21种设计模式略见一斑

    NULL 博文链接:https://teddywang.iteye.com/blog/769122

    循环冗余校验-概念 算法 应用

    CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,...例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。

    CRC16或32校验

    CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码...例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑

    CRC算法和实现

    例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。 差错控制理论是在代数理论基础上建立起来的。这里我们着眼于介绍CRC的算法与实现,对原理只能...

Global site tag (gtag.js) - Google Analytics