外观模式:为子系统中的一组接口提供一个一致的界面。

也就是当我们有一组数据要访问我个模块时,每一次访问都要指向不同的模块,这样做很是麻烦而且对于内部结构来说还不是很多安全的。

为解决这样的问题我们可以从这几个模块中抽取出一个共同的门面,在外部的数据可以通过这个门面来访问其内部的所有模块,这内部结构对外是不可见的,

就要安全的多。每一次访问其内部时,只需访问这个门面既可。因此这也叫做门面模式。

举个我们常用的例子来说,我们将处理完了的数据存入到数据库中时,要使用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-设计模式-外观模式相关推荐

  1. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  2. 设计模式--------外观模式

    设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...

  3. [设计模式]外观模式

    1. 定义 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更加容易使用. 外观不仅简化了系统内接口的使用,也将客户从组件中的子系统中解耦,外观和适配器都可 ...

  4. Java设计模式---外观模式

    外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中一种 ...

  5. Java 设计模式——外观模式

    概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...

  6. Java设计模式-外观模式

    我又来了,继Java设计模式之桥接模式后,现在来到了外观模式啦,外观模式又称为门面模式啦

  7. 大话设计模式—外观模式

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  8. 设计模式 外观模式 一键电影模式

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Fa ...

  9. 8. 设计模式 外观模式 一键电影模式

    这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是 ...

  10. 大话设计模式——外观模式

    股民炒股代码 /*** 股票1*/ public class Stock1 {// 卖股票public void sell() {System.out.println("股票1卖出" ...

最新文章

  1. 李彦宏:汽车工业面临无人驾驶百年变局
  2. python教程:mixin详解
  3. http?https?相对协议?
  4. Mac无法开机?如何修复
  5. 第010讲 通配符选择器 父子选择器
  6. 湖科大计算机科学与技术,湖南科技大学计算机科学与工程学院前来我院进行访问与交流...
  7. 轻松获得卡巴斯基KEY
  8. 博途v14 加入C语言的方法,如何利用博途V14新建S7-1200项目?
  9. Unity 导航网格的使用
  10. 电脑服务器注册表,(恢复Windows服务器注册表的系统配置单元.doc
  11. windows系统下更改itunes默认备份地址(小白实操)
  12. 排序算法的代码--选择排序综合训练题
  13. AllenNLP—笔记—json
  14. 2016php开发 饱和了吗,2016PHP程序员待遇和就业前景调查
  15. 概率统计Python计算:卡方分布分位点计算
  16. 【GitHub】Your account has been flagged.解决方法
  17. python里的π怎么输入_【后端开辟】python里的π怎样输入
  18. WinForm DataGridView实时更新表格数据
  19. 电脑防止锁屏JS代码
  20. 中科创达获华为认证成为HarmonyOS Connect ISV合作伙伴

热门文章

  1. [CTSC2018]假面(概率DP)
  2. 敏捷个人学习----为什么的力量
  3. 为什么要使用class.forname在DriverManager.getConnection之前
  4. hibernate 多表查询
  5. android两种基本联网方式与一种第三方开源项目的使用
  6. nginx服务器设置url的优雅链接
  7. [转载] 信息系统项目管理师教程——06 信息化基础知识
  8. c语言秒表编程示例,求大神帮忙写一篇简单的C语言秒表程序, 谢谢。
  9. unity 平移图片_unity实现贴图矩阵运算(旋转平移缩放)
  10. python3怎么安装opencv_如何在Ubuntu 16.04上安装支持Python 3.x的OpenCV