- 浏览: 1505434 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
GOF《设计模式》一书对Facade模式是这样描述的:
为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。
大致意思是说:使用一种比原有方式更简单的办法与系统交互。例如,我们把一个很文件的文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。
我就上面说的那个情形写一下实现代码,首先我们要实现二个子系统,呵呵,把抽屉比喻成系统,有点夸张了(DrawerOne、DrawerTwo):
- public class DrawerOne {
- public void open() {
- System.out.println("第一个抽屉被打开了");
- getKey();
- }
- public void getKey() {
- System.out.println("得到第二个抽屉的钥匙");
- }
- }
public class DrawerOne { public void open() { System.out.println("第一个抽屉被打开了"); getKey(); } public void getKey() { System.out.println("得到第二个抽屉的钥匙"); } }
- public class DrawerTwo {
- public void open() {
- System.out.println("第二个抽屉被打开了");
- getFile();
- }
- public void getFile() {
- System.out.println("得到这个重要文件");
- }
- }
public class DrawerTwo { public void open() { System.out.println("第二个抽屉被打开了"); getFile(); } public void getFile() { System.out.println("得到这个重要文件"); } }
- public class Client{
- public static void main(String []args){
- DrawerOne darwerOne=new DrawerOne();
- DrawerTwo darwerTwo=new DrawerTwo();
- darwerOne.open();
- darwerTwo.open();
- }
- }
public class Client{ public static void main(String []args){ DrawerOne darwerOne=new DrawerOne(); DrawerTwo darwerTwo=new DrawerTwo(); darwerOne.open(); darwerTwo.open(); } }
由于没有使用Façade模式,可以看到要想得到这个文件要首先打开第一个抽屉,然后再打开第二个抽屉,在我们实际所开发的系统中,有时候客户要实现某一操作,并不需要知道实现这一操作的详细步骤,而是简单地点击某一个按钮就可以得到自己想要的结果。下面对上面的代码使用Façade模式进行改进,建立一个FacadeDrawer类:
- public class DrawerFacade {
- DrawerOne darwerOne;
- DrawerTwo darwerTwo;
- public DrawerFacade() {
- darwerOne = new DrawerOne();
- darwerTwo = new DrawerTwo();
- }
- public void open() {
- darwerOne.open();
- darwerTwo.open();
- }
- }
public class DrawerFacade { DrawerOne darwerOne; DrawerTwo darwerTwo; public DrawerFacade() { darwerOne = new DrawerOne(); darwerTwo = new DrawerTwo(); } public void open() { darwerOne.open(); darwerTwo.open(); } }
修改Client类:
- public class Client{
- public static void main(String []args){
- DrawerFacade drawer = new DrawerFacade();
- drawer.open();
- }
- }
public class Client{ public static void main(String []args){ DrawerFacade drawer = new DrawerFacade(); drawer.open(); } }
输出结果如下:
第一个抽屉被打开了
得到第二个抽屉的钥匙
第二个抽屉被打开了
得到这个重要文件
正如上面所说,客户端client,它并不需要关心子系统,而是关心DrawerFacade所留下来的和外部交互的接口,而子系统在DrawerFacade的聚合。
以上只是个人拙见,哪里有不正确的地方,希望大家多多批评指正。^_^
Facade模式主要适用于以下几种情况:
1) 不需要使用一个复杂系统的所有功能,而且可以创建一个新的类,包含访问系统的所有规则。如果只需要使用系统的部分功能,那么你为新类所创建的API将比原系统的API简单的多。
2) 希望封装或者隐藏系统原系统。
3) 希望使用原系统的功能,而且还希望增加一些新的功能。
4) 编写新类的成本小于所有人学会使用或者未来维护原系统上所需的成本。
发表评论
-
设计模式系列-适配器模式(&几种模式的链接)
2011-09-02 15:55 2101一、上篇回顾 通过上篇的简单讲解,我们知道了,组 ... -
java回调函数
2011-09-01 16:31 1454所谓回调,就是客户程序C调用服务程序S中的某个方法a,然后S又 ... -
深入浅出java命令模式
2011-08-20 14:39 1146一、引言 忙里偷闲, ... -
Java命令模式:设计模式的四人帮
2011-08-20 11:47 1741本文介绍了一个Java设 ... -
Java命令模式:设计模式的四人帮
2011-08-20 11:07 2本文介绍了一个Java设 ... -
桥接模式
2011-07-14 14:27 3844桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个 ... -
Java设计模式圣经连载(03)-抽象工厂模式
2011-07-05 09:18 12671.3 抽象工厂(Abstract F ... -
模板方法设计模式
2011-07-04 22:49 1292Template模板模式定义: ... -
JDK里的设计模式
2011-06-28 16:07 1383下面是JDK中有关23个经典设计模式的示例,在stakeove ... -
UML类图关系全面剖析
2011-06-28 10:38 2100UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)。 ... -
设计模式-火龙果
2011-06-22 16:19 1205鸭子-策略模式(Strategy) http://www.u ... -
设计模式之六大原则——单一职责原则(SRP)
2010-10-19 08:48 1960开闭原则(Open Closed Pr ... -
状态模式和策略模式的比较
2010-09-27 19:56 1234状态模式(state pattern)和 ... -
简单工厂模式-《java与模式》
2010-09-26 19:50 1363缺点: 1、工厂类成为 ... -
门面模式-《java与模式》
2010-09-26 19:01 14751、医院的例子 病人 ... -
相关知识
2010-09-21 15:14 11461、java设计模式之实例详解http://java.chin ... -
工厂模式-设计模式-笔记(一)
2010-09-09 18:33 1268我们不应该针对实现编程,但是当我每次使用new时,不正是在针对 ... -
装饰者模式-设计模式-笔记(二)
2010-09-08 08:38 1542装饰java.io类: InputStream //抽象组件 ... -
来杯咖啡-装饰者模式(Decorator)
2010-09-07 21:31 1488前言 上篇【观察者模 ... -
观察者模式-设计模式-笔记(一)
2010-09-06 14:53 1122出版者+订阅者==观察者模式 报纸的订阅 出版 ...
相关推荐
外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...
**外观模式(Facade Pattern)**是一种结构型设计模式,它主要解决的是复杂系统或子系统对外暴露一个简单统一的接口,使得客户端无需关心内部复杂的交互细节。这种模式在实际开发中广泛应用,尤其在大型项目中,它能...
学习设计模式能带来诸多好处,如复用成熟的解决方案,提高团队沟通效率,提升设计质量,增强代码的可维护性。同时,设计模式也是一种通用的术语,使得开发者能用共同的语言讨论和分析设计问题。 在实际应用中,...
外观模式是一种结构型设计模式,它的主要目标是提供一个统一的接口,用来简化对复杂系统的访问。在Java中,当你有一个复杂的子系统,而你希望客户端代码能够以一种更简洁、更易于理解的方式来与之交互时,就可以使用...
**外观模式(Facade Pattern)**是面向对象设计模式中的一种结构型模式,它提供了一个统一的接口,用于访问子系统中的各个部分。在C#编程中,外观模式可以帮助我们简化复杂的系统接口,使得客户端代码与复杂的内部...
外观模式(Facade Pattern)是一种结构型设计模式,用于为复杂子系统提供一个简单的接口。它通过封装系统内部的复杂性,提供一个统一的接口,使得客户端能够更加方便地使用子系统的功能。这种模式通常用于简化代码、...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第11节:结构型模式Facade外观模式
外观模式(Facade Pattern)在软件工程中是一种设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以更容易地使用这些系统或子系统。外观模式的核心思想是通过一个高层次的接口,隐藏子系统的复杂性...
Facade(外观)设计模式是一种结构型设计模式,它的主要目的是为复杂的系统提供一个统一的、简单的接口,使得客户端可以避免与系统的内部复杂性进行交互。Facade模式将子系统的多个组件组合在一起,提供了一个高层次...
本篇文章将深入探讨C#面向对象设计模式中的Facade外观模式,这是一种结构型模式,旨在通过提供一个统一的接口来简化复杂的子系统。文章通过具体的例子和代码展示了如何在实际开发中运用这一模式,并解释了它与其他几...
设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立...10、设计模式之State 11、设计模式之Facade(外观) 12、设计模式之Interpreter(解释器) 13、设计模式之Visitor
C#面向对象设计模式纵横谈\C#面向对象设计模式纵横谈\10.Facade 外观模式(结构型模式).wmv )
**外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以不关心内部的复杂性,只通过这个接口与子系统进行交互。这种模式降低了系统的复杂度,提高了代码的...
**外观(Facade)设计模式**是一种结构型设计模式,它为复杂的系统或子系统提供一个统一、简洁的接口,使得客户端可以更容易地与其交互。在软件工程中,当一个系统包含多个子系统或者组件,而这些子系统之间相互依赖...
设计模式之Facade(外观) 设计模式之Proxy(代理) 设计模式之Adapter(适配器) 设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template ...
在软件设计模式的世界里,`Command`(命令)和`Facade`(外观)模式是非常重要的两种设计模式。它们分别服务于不同的目的,但都是为了提高代码的可读性、可维护性和灵活性。 `Command`模式是一种行为设计模式,它将...
设计模式面面观(13):外观模式(Facade Pattern)-结构型模式 http://blog.csdn.net/fanweiwei/archive/2008/04/17/2299641.aspx
外观模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是为了解耦系统,提供一个统一的入口,使得客户端可以更容易地使用复杂的子系统。在Java中,外观模式通常用于简化对复杂系统的访问,它创建了...