开发者社区> 技术小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java外观模式(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. String sql = "SELECT * FROM <table> WHERE <column name> = ?";

  9.   prep = conn.prepareStatement( sql );

  10.   prep.setString( 1, "<column value>" );

  11.   rset = prep.executeQuery();

  12. if( rset.next() ) {

  13. System.out.println( rset.getString( "<column name" ) );

  14. }

  15. } catch( SException e ) {

  16.   e.printStackTrace();

  17. } finally {

  18.   rset.close();

  19.   prep.close();

  20.   conn.close();

  21. }

  22. }

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

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

68df9da7034c8818b3dbb854fd7d35472badd5fa

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


原文发布时间为:2018-08-29

本文作者:HARRIES

本文来自云栖社区合作伙伴“Java杂记”,了解相关信息可以关注“Java杂记”。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java--设计模式-6-外观模式
外观模式(Facade Pattern)应该是最好理解的一个设计模式了,在我们项目中向外部提供一个外部可以访问系统的接口,然由这个接口去耦合子系统或者子接口,外部与子接口完全解耦。这种类型的设计模式属于结构型模式。
0 0
【设计模式】Java设计模式 - 外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
0 0
Java设计模式-外观模式
Java设计模式-外观模式
0 0
【玩转23种Java设计模式】结构型模式篇:外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
0 0
【每天一个java设计模式(十)】 - 外观模式
【每天一个java设计模式(十)】 - 外观模式
0 0
重学 Java 设计模式:实战外观模式
设计模式是解决程序中不合理、不易于扩展、不易于维护的问题,也是干掉大部分ifelse的利器,在我们常用的框架中基本都会用到大量的设计模式来构建组件,这样也能方便框架的升级和功能的扩展。但!如果不能合理的设计以及乱用设计模式,会导致整个编程变得更加复杂难维护,也就是我们常说的;反设计、过渡设计。而这部分设计能力也是从实践的项目中获取的经验,不断的改造优化摸索出的最合理的方式,应对当前的服务体量。
0 0
Java外观模式(门面模式Facade)
外观模式也叫门面模式,是开发过程中使用频率非常高的一种设计模式,但非常容易理解。
0 0
浅谈JAVA设计模式之——外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
0 0
Java单体应用 - 架构模式 - 03.设计模式-11.外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
0 0
java设计模式之外观模式(门面模式)(结构型模式)
针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。 一、概念介绍  外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。
499 0
+关注
技术小能手
云栖运营小编~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Java基础入门(四)-泛型、反射、注解
立即下载
JAVA反射原理以及一些常见的应用
立即下载
Spring Cloud Alibaba - 重新定义 Java Cloud-Native
立即下载