設計模式之Facade(外觀)

原创 2004年06月24日 19:50:00

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.jpg

由上圖可以看出, facade實際上是個理順系統間關係,降低系統間耦合度的一個常用的辦法,也許你已經不知不覺在使用,儘管不知道它就是facade

設計模式之Facade(外觀)

Facade的定義: 爲子系統中的一組介面提供一個一致的介面。Facade一個典型應用就是資料庫JDBC的應用,如下例對資料庫的操作: public cl...
  • alex197963
  • alex197963
  • 2007年05月12日 09:27
  • 672

浅谈JAVA设计模式之——外观模式(Facade)

一、概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、适用性 1.当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断...
  • l1028386804
  • l1028386804
  • 2015年05月07日 23:32
  • 3365

浅谈 Facade 模式

Facade 模式 所谓 Facade 模式,是一个可以让事情变得有点头绪的好东西。   一个 Facade 肯定是一位某方面的“行家”,例如数据库操作。它对来自上层的请求屏蔽了具体的业务逻辑细节,任...
  • shimiso
  • shimiso
  • 2010年04月26日 22:49
  • 1852

23种设计模式(1)-Facade设计模式

前记        曾经我遇见的一个需求是这样的,接口A有个方法void methodA(),类B需要实现接口A的methodA()方法,并且在类B中需要把methodA()方法内部处理逻辑获得的结...
  • duchao123duchao
  • duchao123duchao
  • 2016年05月16日 14:47
  • 3397

Facade模式详解--设计模式(11)

Facade模式 一 意图   为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二 动机   将一个系统划分成为若干个子系统有...
  • fanyun_01
  • fanyun_01
  • 2016年06月29日 08:57
  • 1359

Facade模式及其与Adapter模式和Proxy模式的区别

Facade模式及其与Adapter模式和Proxy模式的区别 Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。它是为子...
  • iw1210
  • iw1210
  • 2014年05月30日 11:14
  • 2084

Facade与Mediator模式的区别

http://www.cnblogs.com/sweetdream/archive/2005/12/19/299983.html 门面(Facade)模式和中介者(Mediator)模式有着...
  • caolaosanahnu
  • caolaosanahnu
  • 2014年02月21日 23:27
  • 1207

一天学习两个设计模式之Facade模式(外观模式,结构型模式)

一天学习两个设计模式之Facade模式(外观模式,结构型模式)
  • Dax1n
  • Dax1n
  • 2017年05月03日 19:36
  • 394

JAVA设计模式十九--Facade(外观模式)

Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,隐藏子系统的复杂性,使子系统更加容易使用。 Facade模式概述         实际应用中,我们在对付一些老旧...
  • hfmbook
  • hfmbook
  • 2012年06月29日 15:25
  • 18480

Java 设计模式 之 facade(外观)设计模式

Facade模式要求一个子系统的外部与其内部的通信通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。       当子系统经过不断的演变,变得异常复杂时,...
  • u010349169
  • u010349169
  • 2014年01月28日 17:24
  • 2924
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:設計模式之Facade(外觀)
举报原因:
原因补充:

(最多只允许输入30个字)