`
gong1208
  • 浏览: 559099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式(七)——门面模式

阅读更多

设计模式(七)——门面模式

 

门面模式(facade pattern),又称外观模式,为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简而言之,就是把一堆复杂的流程封装成一个接口供给用户更简单的使用,这个设计模式里有三个角色:

1)门面角色( facade ):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。 
2)子系统角色(subsystem):实现了子系统的功能。对它而言, façade 角色就和客户角色一样是未知的,它没有任何 façade 角色的信息和链接。 
3)客户角色:调用 façade 角色来完成要得到的功能。

 

好了,老规矩,假设一个场景,这里说句题外话,在我写这个玩意的时候,每当我假设某个场景的时候,比如什么造汽车,卖水果的场景,我旁边同事就很鄙视的说,不要搞这些没意义的场景,什么卖西瓜造汽车,造你妹啊,叼用都没有的代码,你这误导新人,说的十分激动义愤填膺,我说,我这是为了说明这设计模式的思想,所以我才选一些生活中常用的场景而不引人一些复杂的模型嘛,关键是让别人理解这个思想嘛,要让大家举一反三,我又不是为了写个具体有用的代码让他copy过去直接用的。他说,诡辩,滚~


不过我觉得给他一次机会,所以这次我写个有用点的场景。是这样,门面模式最常见也最有效的一个写法就在jdbc连数据库时,我们知道连接一个数据库,要先加载驱动,获得连接,获得statement,然后执行操作,最后关闭连接,步骤顺序都不能变,如果每次执行都要自己写这些,那真的会蛋蛋疼,所以,我们把这些都封装起来,如下:

先建立我们的门面,但是我们改进下,我们把这个门面写成抽象的,这样扩展性更好:

package com.gy.designpattern.facade;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * ClassName:DBFacade <br/>
 * Function: 抽象的数据库门面. <br/>
 * Reason:	 这样可以使用这个连接上不同类型的数据. <br/>
 * Date:     2012-7-10 上午10:51:35 <br/>
 * @author   gongyong
 * @version
 * @since    JDK 1.6
 * @see
 */
public abstract class DBFacade {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		String sqlStr = "";
		//获取数据库连接
		abstract void getConnection();
		//创建statement
		public void createStatement() {
			try {
				stmt = conn.createStatement();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		//执行查询操作
		public void executeQuery(){
			try {
				rs = stmt.executeQuery(sqlStr);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		//封装之前三个必须操作
		public void doQuery(String sqlStr){
			this.sqlStr = sqlStr;
			getConnection();
			createStatement();
			executeQuery();
		}

		public void close(){
			try {
				rs.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
}

 

然后我们具体实现这个门面,我们用mysql数据库:

 

package com.gy.designpattern.facade;

import java.sql.DriverManager;

/**
 * ClassName:MysqlUtil <br/>
 * Function: mysql数据库门面的具体实现. <br/>
 * Reason:	 TODO ADD REASON. <br/>
 * Date:     2012-7-10 上午10:54:46 <br/>
 * @author   gongyong
 * @version
 * @since    JDK 1.6
 * @see
 */
public class MysqlUtil extends DBFacade{

	/**
	 * 注入数据库驱动并连接上指定的数据库.
	 * @see com.gy.designpattern.facade.DBFacade#getConnection()
	 */
	@Override
	void getConnection(){
		try{
			Class.forName("com.mysql.jdbc.Driver");
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

 

到这里门面已经完成了,看怎么用吧:

 

 

package com.gy.designpattern.facade;

import java.sql.SQLException;

/**
 * ClassName:Client <br/>
 * Function: 客户端,用来操作数据库. <br/>
 * Reason:	 TODO ADD REASON. <br/>
 * Date:     2012-7-10 上午10:58:05 <br/>
 * @author   gongyong
 * @version
 * @since    JDK 1.6
 * @see
 */
public class Client {

	public static void main(String[] args){
		//sql语句
		 String sqlStr = "select * from user";
		 //先new出一个mysql数据库的操作工具,也就是门面
		 DBFacade dbFacade=new MysqlUtil();
		 try {
			 //直接使用该门面中封装好的方法
			dbFacade.doQuery(sqlStr);
			 while(dbFacade.rs.next()){
				 System.out.print(dbFacade.rs.getString(2));
			 }
		} catch (SQLException e) {

			e.printStackTrace();

		}finally{
			dbFacade.close();
		}
	}

}

 

看吧,是不是封装之后再执行各种数据库的操作就很简单了,客户端完全不需要知道怎么连接数据库等等这些流程,他只需要new一个门面,调用对应的方法就可以了,是不是方面了许多,就是这样。

分享到:
评论

相关推荐

    经典的EJB模式——门面模式

    门面模式,作为一种软件设计模式,是EJB(Enterprise Java Beans)中的一种经典模式,它在企业级应用开发中起到简化复杂系统接口的作用。EJB是Java编程语言中用于构建服务器端企业级应用的组件,它们是可分布式部署...

    设计模式大作业——斗地主程序PPT学习教案.pptx

    在斗地主程序的设计中,我们可以看到多个设计模式的应用,这些模式对于构建高效、可维护的游戏软件至关重要。首先,从分工来看,团队成员分别负责游戏主程序、AI、声音模块和网络模块,这体现了职责分明的模块化设计...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    C#23种设计模式_示例源代码及PDF

    门面模式: 门面模式提供一个 门面模式 外部与一个子系统的通信必须通过一个统一的门面对象进行。 高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有 一个实例,也就是说它是一个...

    java和设计模式ppt教程

    java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    C++设计模式原理与实战视频课

    C++设计模式原理与实战视频课 1-1 课程介绍 1-2 导论UML和设计模式导论 2-1 简单工厂方法的定义场景与实现-针对接口编程的设计思想剖析 2-2 简单工厂实用工程技术:C++对象动态创建技术与配置化开发 2-3 单例模式的...

    设计模式资料有助于你更好的了解

    在本文中,我们将深入探讨两个常见的设计模式——工厂模式和门面模式,并结合GoF(Gang of Four)的设计模式理论,阐述它们在软件设计中的作用和重要性。 首先,工厂模式是一种创建型设计模式,它提供了一种创建...

    价值共创视角下的电商平台商业模式创新——以京东商城与苏宁云商为例.zip

    "价值共创视角下的电商平台商业模式创新——以京东商城与苏宁云商为例"的主题深入探讨了电商平台如何通过价值共创实现商业上的突破和转型。 价值共创是现代商业模式的核心理念之一,它强调企业与消费者、供应商以及...

    Java设计模式经典搞笑珍藏版

    ### Java设计模式经典搞笑珍藏版 #### 一、引言 《Java设计模式经典搞笑珍藏版》这本书以一种轻松幽默的方式介绍了23种经典的设计模式及其在Java中的应用。设计模式是一种软件工程领域中非常重要的概念,它提供了...

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    软件设计模式大作业

    在本“软件设计模式大作业”中,学生深入学习并实践了Java编程语言中的六种经典设计模式,这些模式对于理解和构建复杂、可维护的软件系统至关重要。以下是关于这些设计模式的详细介绍: 1. **简单工厂模式**:这是...

    java 设计模式-个人总结

    ### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...

    设计模式 面向对象程序设计 C#版

    9-12章深入探讨了设计模式的一些核心原则,如迪米特法则和门面模式,帮助读者理解如何写出更符合设计模式原则的代码。 13章则对设计模式进行了思考,指出设计模式不仅仅是理论,而是实际开发中的有力武器。 整本书...

    设计模式之禅(第2版)

    #### 第二部分 真刀实枪——23种设计模式完美演绎 接下来的部分将详细介绍23种设计模式,每种模式都将从定义、应用场景、扩展到最佳实践等方面进行阐述。 **第7章 单例模式** - **7.1 我是皇帝我独苗** 介绍...

    C#设计模式大全

    这个问题用来比喻设计模式中的一个基本问题——是先定义接口还是先实现类。通常建议先定义接口,再实现类,这样可以更好地支持多态性和灵活性。 #### 大瓶子套小瓶子还是小瓶子套大瓶子? 这是对组合模式的一个...

    戏说面向对象程序设计

    ——聊设计模式原则 第十章三层架构,分层开发 第十一章无熟人难办事?——聊设计模式迪米特法则 第十二章有了门面,程序员的程序会更加体面 第十三章设计模式不能戏说!设计模式怎就不能戏说?

    连锁便利商店店址选择评估模式之研究——运用模糊AHP法.doc

    研究设计方面,首先确定了商圈评估因素(如人口统计、商圈吸引力、社区发展性和交通条件)和店址选择因素(如店面条件、租金成本、可视性和邻近设施),然后运用模糊AHP法计算各因素的相对权重,构建评估模型。...

Global site tag (gtag.js) - Google Analytics