设计模式之Facade(外观 总管 Manager)
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);msql.setString( 1, "<column value>" );rset = msql.executeQuery();if( rset.next() ) {System.out.println( rset.getString( "<column name" ) );}} catch( SException e ) {e.printStackTrace();} finally {mysql.close();mysql=null;}}
可见非常简单,所有程序对数据库访问都是使用改接口,降低系统的复杂性,增加了灵活性.
如果我们要使用连接池,也只要针对facade接口修改就可以.
由上图可以看出, facade实际上是个理顺系统间关系,降低系统间耦合度的一个常用的办法,也许你已经不知不觉在使用,尽管不知道它就是facade.
设计模式之Facade(外观 总管 Manager)相关推荐
- 设计模式之Facade(外观)模式
我们通过一个简单的开关电脑模拟程序来说明Facade模式(外观模式) CPU类 public class Cpu { public void start() { system.out.prin ...
- Facade(外观 总管 Manager)
Facade模式的定义: 为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { Conn ...
- 【白话设计模式二】外观模式(Facade)
为什么80%的码农都做不了架构师?>>> #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...
- 设计模式笔记 10.Facade 外观模式(结构型模式)
10. Facade 外观模式 2008-8-18 动机(Motivation) 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种 ...
- 设计模式学习笔记——外观(Facade)模式
设计模式学习笔记--外观(Facade)模式 @(设计模式)[设计模式, 外观模式, facade] 设计模式学习笔记外观Facade模式 基本介绍 外观案例 类图 实现代码 Database类 ma ...
- 设计模式10: Facade 外观模式(结构型模式)
Facade 外观模式(结构型模式) 系统的复杂度 假设我们要开发一个坦克模式系统用于模拟坦克车在各种作战环境中的行为,其中坦克系统由引擎.控制器.车轮.车身等各个子系统构成. internal cl ...
- 【设计模式】之外观(Facade)模式
[设计模式]之外观(Facade)模式 外观模式是为了解决类与类之间的依赖关系的,将他们的关系放在一个Facade类中,降低了类类之间的耦合度. 图形化代码显示 源代码 //分支类 1,2,3代码类似 ...
- 胖虎白话学习设计模式之外观设计模式(Facade)
胖虎白话学习设计模式之外观设计模式(Facade) 记录胖虎学习设计模式过程,不许勿喷,转载请注明出处! http://blog.csdn.net/ljphhj 1.存在问题 开发中我们经常会遇到一种 ...
- 设计模式学习之---Facade(外观)模式
1.Facade外观模式,是一种接口型模式.这种模式的目的在于,它为子系统中的一组接口,定义了一个更高层次的接口,通过这个接口,提供一个统一的接口,使子系统更加容易使用. 2.实现:创建一个新的类,提 ...
最新文章
- python中用lxml解析html
- 04_resultMap配置
- surefire 拉起testng单元测试类的源码流程阅读(一)
- 一文带你认识FPGA~
- python对象属性在引用时前面需要加()_python基础-面向对象进阶
- 【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)
- python2.7安装matplotlib_Ubuntu-Python2.7安装 scipy,numpy,matplotlib 和pip
- IP,VIP,SCAN IP之间的关系是怎么样的呢?
- centos mysql cpu_MySQL占用CPU100%解决一例
- 谈谈软件工程与计算机科学的区别
- linux正则表达式脚本实例,Shell下的正则表达式及实例
- 详细讲解半加器、全加器、四位全加器,并使用FPGA实现半加器、全加器
- PDF文件拆分为单独页面且通过每页的相关内容重名命
- 2012年8月26日
- 问题 F: 小明与隔壁老王之间不得不说的故事
- 数据集fer2013
- 程序员遇到 Bug 时的 30 个反应,你是哪一种?
- 数据库被攻击 怎么解决
- 羽毛球规则之羽毛球场地尺寸(球场、网柱、球网)
- html的text-decoration,CSS属性参考 | text-decoration
热门文章
- vue移动端ui框架vant如何自定义引入阿里巴巴图标库
- [附源码]Python计算机毕业设计SSM基于售楼系统(程序+LW)
- [XDOJ]日常作业汇总(不定时更新)
- 【添柴】12010.解密QQ号 解题报告
- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at java.lang.It
- c语言围棋ai算法代码,晒晒围棋代码
- Windows电脑申请iOS证书详细流程和工具
- centos7.x openvpn+freeradius认证daloradius管理
- 网络远程控制与登录关闭
- oracle阴历解决方案