- 浏览: 1229120 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
外观模式定义:
外观模式:提供一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高级接口,让子系统更容易使用.
UML图:
一个典型的例子就是家庭影院系统:
如果想看电影可能需要用到多个子系统:如:电源开关,电视机开关,碟片机开关,灯光开关等等接口.
那么可不可以提供一个统一的接口给我,我可以通过watchMovie方法就可以完成所有子系统的功能呢?
可以定义一个接口,并通过组合的方式将所有子系统接口的方法在WatchMovie()中调用.
这样只要把实例化好的接口传给这个统一的接口对象就可以了.
同样可以进行close操作.
类似的在进行数据库操作时我们一般要提供一个DbUtil类,其实就是做了一个统一的接口让业务层进行调用.这也是Facade的一个示例.
如JDBC做数据库查询时候,如果面向的是多个不同类型的数据库开发。。
package com.lwf.object.facade; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public abstract class Facade { Connection conn = null; Statement stmt = null; ResultSet rs = null; String sqlStr = ""; abstract void getConnection(); 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(); } } }
package com.lwf.object.facade; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MySQL extends Facade{ public MySQL(){ } public void getConnection() { try { Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection("jdbc:postgresql://localhost/GACO","admin","passwd"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
package com.lwf.object.facade; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class TestFacade { public static void main(String[] args) { String sqlStr = "select * from \"user\""; String sqlStr1 = "select * from company"; Facade m = new MySQL(); try { m.doQuery(sqlStr); m.doQuery(sqlStr1); while(m.rs.next()){ System.out.println(m.rs.getString(3)); } } catch (Exception e) { e.printStackTrace(); } finally{ m.close(); } } }
外观模式的意图就是提供一个简单的接口,从而让我们的子系统更易于使用.
最少知识原则:只和你的密友谈话
意思当我们设计系统的时候要尽量减少对象间的交互,只留下几个密友.就是不要让太多的类耦合在一起,从而避免了修改系统的一部分功能会影响其它的功能.从而减少了维护的花费.
方针:
对象的方法应该只调用 :
1.对象本身
2.被当作方法参数而传进来的对象
3.此方法所创建或实例化的对象
4.对象的组件:理解为通过组合的其它对象.has-a
如类:
public class Test{ private Watch watch; private float getWatchFloat(){ return watch.getWatch().getFloat(); } }
上面方法调用中优化一下,应该在Watch中加入getFloat方法
发表评论
-
深入浅出设计模式十四——复合模式
2016-07-05 09:35 5643 -
深入浅出设计模式十一——组合模式
2016-07-05 09:31 4743 -
深入浅出设计模式十二-状态模式(行为型)
2010-07-20 16:27 1626定义: 状态模式: 允许对象在内部状态改变时改变它的行为 ... -
深入浅出设计模式十——迭代模式
2010-07-19 14:24 932我 -
代理模式\装饰模式\适配器模式区别
2010-07-16 17:16 2415代理模式\装饰模式\适配器模式它们有相似性,那么具体在什么情况 ... -
深入浅出设计模式十三——代理模式(结构型)
2010-07-16 11:29 869以下两篇文章分别讲了静态代理与动态代理 http://qu ... -
深入浅出设计模式九——模板方法模式(行为型)
2010-07-14 16:12 1028模板方法模式: 定义一个操作中的算法的骨架,而将一些步骤延迟 ... -
GRASP原则简介
2010-03-10 17:38 2405GRASP(General Responsibilit ... -
深入浅出设计模式六——封装调用(命令模式)
2010-03-08 15:35 1123命令模式: 将一个请求封装为一个对象,从而使你可用不同的请 ... -
深入浅出设计模式五——独一无二(单例模式)
2010-03-08 15:34 1095先看文章 :http://quicker.iteye.com/ ... -
深入浅出设计模式四——多区域比萨加盟店生产比萨实现(抽象工厂模式)
2010-03-05 16:17 1295有关抽象工厂文章可先看:http://quicker.itey ... -
深入浅出设计模式四——比萨店生产比萨实现(工厂方法模式)
2010-03-04 17:11 2399在http://quicker.iteye.com/blog/ ... -
深入浅出设计模式三——Beverage实现(装饰者模式)
2010-03-03 17:31 1322上图的实现代码见 ... -
深入浅出设计模式二——WeatherData设计(观察者模式)实现二
2010-03-02 17:24 1216在上文:深入浅出设计模式二——WeatherData设计(观察 ... -
深入浅出设计模式二——WeatherData设计(观察者模式)实现一
2010-03-01 14:31 1619UML详细图 良好的OO ... -
深入浅出设计模式一——Duck设计(策略模式)
2010-02-26 18:04 2150以下为针对上图所列代码: package com. ... -
深入浅出设计模式七——Adapter模式(结构型)
2010-02-22 15:45 1135将两个不兼容的类或者说没有关系的类纠合在一起使用。就要在使用 ... -
创建型——Builder模式
2010-02-04 16:04 988UML: 如何使用: ... -
创建型(单例模式)
2010-01-26 11:39 1007package com.lwf.create.singleto ... -
创建型——工厂模式(抽象工厂)
2010-01-19 23:56 1063UML图 特例图 以图的实现代码: ...
相关推荐
第4章GoF-StructuralDesignPatterns结构型设计模式 95 4.1AdapterPattern(适配器模式) 96 4.1.1定义 96 4.1.2现实中的实例——电脑电源适配器 97 4.1.3C#实例——化学数据银行 98 4.1.4Java实例——清洁系统 ...
《设计模式精解——GoF23种设计模式解析附C实现源码》这本书提供了深入浅出的设计模式讲解,同时通过C语言的具体实现案例,帮助读者更好地理解和应用这些模式。 #### 二、设计模式简介 设计模式是一种通用的、在...
《JAVA设计模式(中文).chm》是一部专为Java开发者准备的设计模式指南,它深入浅出地阐述了软件工程中的重要概念——设计模式。设计模式是解决常见编程问题的成熟解决方案,是经验丰富的开发者们在实践中总结出的最佳...
扩展系统功能——装饰模式(三) 扩展系统功能——装饰模式(四) 外观模式-Facade Pattern 深入浅出外观模式(一) 深入浅出外观模式(二) 深入浅出外观模式(三) 享元模式-Flyweight Pattern 实现对象的复用——...
这本书深入浅出地介绍了软件工程中的核心概念——设计模式,这些模式是经验丰富的开发者在解决常见问题时总结出的最佳实践。 设计模式是对在特定情境下软件设计问题解决方案的一种描述,它们是可复用的,能够提升...
通过上述分析可以看出,《设计模式——可重用面向对象软件的要素》是一本深入浅出地介绍了设计模式的重要书籍。无论是对于初学者还是有经验的开发人员来说,这本书都能够提供有价值的指导和启发。