设计模式|外观模式在源码中的应用

目录

外观模式介绍

外观模式在spring jdbc模块中的应用

外观模式在tomcat中的应用


外观模式介绍

外观模式又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口

  • 适用场景:子系统越来越复杂,增加外观模式提供简单调用接口;构建多层系统结构,利用外观对象作为每层入口,简化层间调用。
  • 优点:简化了调用过程,无需深入了解子系统,防止带来风险;减少系统依赖,松散耦合;更好的划分层次;符合迪米特法制,即最少知道原则。
  • 缺点:增加子系统、扩展子系统容易引入风险;不符合开闭原则(对扩展开放,对修改关闭)

外观模式在spring jdbc模块中的应用

位于org.springframework.jdbc.support包中的JdbcUtils类,它是主要供内部使用的JDBC的通用方法。

JdbcUtils类中的closeConnection、closeStatement、closeResultSet、extractDatabaseMetaData等方法就是外观类提供的调用子类的接口。

public static void closeConnection(@Nullable Connection con) {
		if (con != null) {
			try {
				con.close();
			}
			catch (SQLException ex) {
				logger.debug("Could not close JDBC Connection", ex);
			}
			catch (Throwable ex) {
				// We don't trust the JDBC driver: It might throw RuntimeException or Error.
				logger.debug("Unexpected exception on closing JDBC Connection", ex);
			}
		}
	}

由于几个方法的调用关系相同,所以只看方法即可。closeConnection方法的入参Connection类位于java.sql包下,通过外观类的包装,客户端直接调外观类进行相应操作接口不需要直接调java.sql包下的子类。

JdbcUtils处的外观模式有一个特别的地方,就是客户端在调用方法时需要传入子类的对象,这样就导致客户端和子类建立了直接的联系。初看似乎不太符合解耦合的思想。我理解这么处理的原因是java.sql包作为数据导入的基础包,充斥在上层结构中,早建立了很多关联,所以就不再需要做多余的解耦合处理。 


外观模式在tomcat中的应用

先下载tomcat的源码

 

导入编译器,找到org.apache.catalina.connector包下的RequestFacade类,它实现了

HttpServletRequest接口,RequestFacade是一个外观类。找到同包中的Request类,可以看到此处request是一个客户端通过RequestFacade外观类调用了HttpServletRequest类的方法。

tomcat中山使用了大量的外观模式,可以搜索facade关键字结尾的类进行研究学习外观模式。


 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值