OOAD-设计模式-外观模式
外观模式:为子系统中的一组接口提供一个一致的界面。
也就是当我们有一组数据要访问我个模块时,每一次访问都要指向不同的模块,这样做很是麻烦而且对于内部结构来说还不是很多安全的。
为解决这样的问题我们可以从这几个模块中抽取出一个共同的门面,在外部的数据可以通过这个门面来访问其内部的所有模块,这内部结构对外是不可见的,
就要安全的多。每一次访问其内部时,只需访问这个门面既可。因此这也叫做门面模式。
举个我们常用的例子来说,我们将处理完了的数据存入到数据库中时,要使用DAO与数据库的连接。是不是我们每个向数据库中的数据进行操作的动作
都要写一个DAO去与数据库连接呢。如果这样话就太过于麻烦了,如果使用外观模式这就简单多了。
实现原理:
加载驱动;创建数据库连接;装载SQL语句;关闭连接;这些动作在每个DAO里面都有是一样的,我们可将其抽取出来放到一个门面对象中去,
该对象对外提供几个方法,从构造传入SQL语句;给每一个“?”站位符赋值;执行SQL语句;关闭连接;
对数据库的操作无外有两种,查询和修改。写两个这样的门面对象就可以完成所有对数据库的操作。
下面是例子:
package com.lovo.testfacade;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Facade {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet result = null;
String sql ;
public Facade(String sql){
this.sql = sql ;
this.getConnection();
try {
this.pstmt = this.con.prepareStatement(this.sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Connection getConnection(){
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection("jdbc:jtds:sqlserver://127.0.0.1:7788/study", "sa", "admin");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
public ResultSet executeQuery (){
ResultSet result = null;
try {
result = pstmt.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result ;
}
public void setObject(int num , Object obj){
try {
pstmt.setObject(num, obj);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void close(){
if(null!=pstmt){
try {
this.pstmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(null!=result){
try {
this.result.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(null!=con){
try {
this.con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package com.lovo.testfacade;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestFacadeModel {
public Boolean testQuery( String name , String password ){
String sql ="select * from myuser where name=? and password=?";
Boolean boo = false;
Facade fa = new Facade(sql);
fa.setObject(1, name);
fa.setObject(2, password);
ResultSet result = fa.executeQuery();
try {
if(result.next()){
boo = true ;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
fa.close();
}
return boo ;
}
public static void main(String[] args) {
System.out.println(new TestFacadeModel().testQuery("wangl", "123"));
}
}
转载于:https://blog.51cto.com/mrwlh/1091037
OOAD-设计模式-外观模式相关推荐
- Python设计模式-外观模式
Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...
- 设计模式--------外观模式
设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...
- [设计模式]外观模式
1. 定义 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更加容易使用. 外观不仅简化了系统内接口的使用,也将客户从组件中的子系统中解耦,外观和适配器都可 ...
- Java设计模式---外观模式
外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中一种 ...
- Java 设计模式——外观模式
概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...
- Java设计模式-外观模式
我又来了,继Java设计模式之桥接模式后,现在来到了外观模式啦,外观模式又称为门面模式啦
- 大话设计模式—外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...
- 设计模式 外观模式 一键电影模式
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Fa ...
- 8. 设计模式 外观模式 一键电影模式
这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是 ...
- 大话设计模式——外观模式
股民炒股代码 /*** 股票1*/ public class Stock1 {// 卖股票public void sell() {System.out.println("股票1卖出" ...
最新文章
- 李彦宏:汽车工业面临无人驾驶百年变局
- python教程:mixin详解
- http?https?相对协议?
- Mac无法开机?如何修复
- 第010讲 通配符选择器 父子选择器
- 湖科大计算机科学与技术,湖南科技大学计算机科学与工程学院前来我院进行访问与交流...
- 轻松获得卡巴斯基KEY
- 博途v14 加入C语言的方法,如何利用博途V14新建S7-1200项目?
- Unity 导航网格的使用
- 电脑服务器注册表,(恢复Windows服务器注册表的系统配置单元.doc
- windows系统下更改itunes默认备份地址(小白实操)
- 排序算法的代码--选择排序综合训练题
- AllenNLP—笔记—json
- 2016php开发 饱和了吗,2016PHP程序员待遇和就业前景调查
- 概率统计Python计算:卡方分布分位点计算
- 【GitHub】Your account has been flagged.解决方法
- python里的π怎么输入_【后端开辟】python里的π怎样输入
- WinForm DataGridView实时更新表格数据
- 电脑防止锁屏JS代码
- 中科创达获华为认证成为HarmonyOS Connect ISV合作伙伴
热门文章
- [CTSC2018]假面(概率DP)
- 敏捷个人学习----为什么的力量
- 为什么要使用class.forname在DriverManager.getConnection之前
- hibernate 多表查询
- android两种基本联网方式与一种第三方开源项目的使用
- nginx服务器设置url的优雅链接
- [转载] 信息系统项目管理师教程——06 信息化基础知识
- c语言秒表编程示例,求大神帮忙写一篇简单的C语言秒表程序, 谢谢。
- unity 平移图片_unity实现贴图矩阵运算(旋转平移缩放)
- python3怎么安装opencv_如何在Ubuntu 16.04上安装支持Python 3.x的OpenCV