设计模式之Facade(外观)模式
2007-04-04 11:41
393 查看
设计模式之Facade(外观 总管 Manager)
板桥里人 http://www.jdon.com 2002/4/6/(转载请保留)模式实战书籍《Java实用系统开发指南》
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(); } } |
在应用中,经常需要对数据库操作,每次都写上述一段代码肯定比较麻烦,需要将其中不变的部分提炼出来,做成一个接口,这就引入了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.
下面是应用外观模式的注意事项:
(1) 在设计外观时,不需要增加额外的功能。
(2) 不要从外观方法中返回子系统中的组件给客户。例如:有一个下面的方法:
CreditCard getCreditCard()
会报漏子系统的细节给客户。应用就不能从应用外观模式中取得最大的好处。
(3)应用外观的目的是提供一个高层次的接口。因此,外观方法最适合提供特定的高层次的业务服务,而不是进行底层次的单独的业务执行。
相关文章推荐
- C++设计模式九--FacadePattern(外观模式)
- 【初学设计模式】Facade (外观)
- java设计模式--外观模式(Facade)
- Facade(外观)设计模式
- 设计模式之Facade(外观 总管 Manager)
- (9)Java设计模式-外观模式(Facade)
- (9)Java设计模式 - 外观模式(Facade)
- 设计模式:外观模式(Facade)
- 设计模式 外观模式(Facade)
- C#设计模式——外观模式(Facade Pattern)
- 设计模式之Facade外观模式
- C#设计模式之十外观模式(Facade Pattern)【结构型】
- Php设计模式之【外观模式Facade Pattern】
- Android设计模式源码解析之外观模式(Facade)
- 设计模式(十一)外观模式(Facade Pattern)
- 设计模式(九)外观模式Facade(结构型)
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
- java23中设计模式——结构模式——Facade(外观 )
- 设计模式(十五)-外观模式(Facade Pattern)——推卸责任
- 设计模式之(五)外观模式Facade