`
minijack
  • 浏览: 22704 次
  • 性别: Icon_minigender_1
  • 来自: 江苏泰州
最近访客 更多访客>>
社区版块
存档分类
最新评论

门面模式Façade

阅读更多
前言:
   今天看servlet一篇博客时,老是提到Façade这玩意儿,本来想以后有时间看看设计模式的,结果经常出现就不好了,严重影响了对servlet的学习。所以就提前先了解了一下Façade这个模式。
简介:
首先,官方定义为:privide a unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.(为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。)
看到这个定义首先想到了必须是spring,个人觉得spring是最大限度的使用这个模式,spring中最最核心是什么? 那就是解决了所有类相互调用的复杂性,将对象之间的互相调用放到配置文件中了,无疑这个配置文件就是一个Façade,也就是定义中所说的高层接口。存属个人感觉,说的可能有点牵强了。O(∩_∩)O~ 下面是是该模式的概念图。
图可以参见:附件!
这个模式原理并不难。下面谈谈:

何时用这个模式?
一般可以分为三个阶段:
   首先在设计的初期,应该有意识的将不同两个层分离,比如经典的三层架构,就需要考虑在数据访问层和业务逻辑层,业务逻辑层和表示层的层与层之间建立外观Façade,这样可以为复杂的子系统提供一个简单的借口,使得耦合打打降低。
   其次,在开发阶段,子系统往往因为不断的重构而变得越来越复杂,大多数模式也会产生很多很多的小类,这本是好事,但是也给外部调用它们的外部程序带来了使用上的困难,增加外观Façade可以提供一个简单的借口,减少它们之间的依赖。
    第三,在维护一个遗留的系统时,可能这个系统已经非常难以维护和扩展了,但因为它包含非常重要的功能,新的需求开发必须要用到它。此时用外观模式Façade也是非常合适的。可以为新系统开发一个外观Façade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Façade对象交互,Façade与遗留代码交互所有复杂的工作。
代码实现:
例子一:
股民炒股代码
具体的股票类 :
Class stock1{            
	Public void sell(){}
	Public void buy(){}
}
Class Stock2{
	Public void sell(){}
	Public void buy(){}
}
Class Stock3{
	Public void sell(){}
	Public void buy(){}
}
Class Stock4{
	Public void sell(){}
	Public void buy(){}
}
 

客户端调用:
Static void Main(){
	Stock1 gu1=new Stock1();
Stock2 gu1=new Stock2();
Stock3 gu1=new Stock3();
Stock4 gu1=new Stock4();

Gu1.buy();
Gu2.buy();                    //   用户需要了解所有股票的具体情况。耦合性很高。
Gu3.buy();
Gu4.buy();
}

使用façade模式之后,(这里的façade就相当于现实中基金了,买了基金之后就不需要对股票再研究了,这些交给基金经理来干就行了。)
基金类(即Facade)
Class fund{
	Stock1 gu1;
	Stock2 gu2;
	Stock3 gu3;
	Stock4 gu4;
	
	Public fund(){
		Gu1=new Stock1();
		Gu2=new Stock2();
		Gu3=new Stock3();
		Gu4=new Stock4();
}
Public void buyfund(){
Gu1.buy();
Gu2.buy();
Gu3.buy();
Gu4.buy();
}
Public void sellfund(){
Gu1.sell();
Gu2.sell();
Gu3.sell();
Gu4.sell();
}
}

客户端调用:
 Static void main(){
	Fund jijin=new fund();    //此时,很显然用户就不需要了解股票,买基金后就ok了
	Jijin.buyfund();
	Jijin.sellfund();
}
  
对于上面例子的解释。在上面例子中,每个股票就类似于一个子系统,基金就相当于一个façade。
    本来还有几个servlet和spring中源码的实例的,可是由于提交时,什么网络抓虫的原因挂了。导致我写了一个多点的博客就遮掩挂了。哎 看来以后写博客还是要在word中先备份。以后有时间再补上吧。 没有办法啊 ! 有木有啊,有木有啊!
                                     2011.04.08 JackChen
  • 大小: 29.2 KB
分享到:
评论

相关推荐

    设计模式原理与应用之结构型模式.pptx

    - Façade模式提供了一个统一的接口,用于与复杂的子系统交互,简化了客户端与子系统之间的通信。它隐藏了子系统的复杂性,只暴露出必要的接口。例如,操作系统提供的图形用户界面API就是一个对外的门面,隐藏了...

    pureMVC加注释版

    - **创建Façade**: 为了方便地使用PureMVC框架,开发者需要首先创建一个Façade实例,并通过它来初始化框架和注册组件。 - **初始化Façade**: 初始化过程中,Façade会注册所有必要的组件,并准备好接收通知。 - *...

    J2EE设计模式-PPT(JDON)

    【Façade模式】也称为门面模式,它在J2EE中常用于简化复杂的系统接口。一个Façade会话Bean可以调用多个实体Bean,从而减少了客户端与底层服务的直接交互,提高了性能并降低了耦合度。 【DTO(Data Transfer ...

    23个软件设计类图详解.rar

    5、Façade 外观、门面 6、Flyweight 享元模式 7、Proxy 代理模式 11个行为模式: 1、Chain of Responsibility 职责链 2、Command 命令 3、Interpreter 解释器 4、Iterator 迭代器 5、Mediator 中介者 6、...

    puremvc开发框架详解

    **Façade**:Façade是PureMVC框架中的门面类,它为用户提供了一个简单的接口来访问框架的核心功能。Façade类内部封装了Model、View和Controller的实例,通过这些实例来实现各个组件之间的通信。 **Core**:Core...

    设计模式解析习题解答,已经做好目录标签

    - 第6章介绍了门面模式(Façade Pattern),它为复杂的子系统提供了一个简单的接口。 - 第7章是适配器模式(Adapter Pattern),允许不同接口的对象协同工作。 - 第9章的策略模式(Strategy Pattern)允许在运行时...

    Java设计模式 J2EE设计模式

    Façade模式,也称为门面模式,常用于简化复杂的系统接口,例如在一个会话Bean中调用多个实体Bean,会话Bean就起到了门面的作用,它减少了客户端直接与多个实体Bean交互的复杂性,同时提高了性能并降低了分层之间的...

    J2EE设计模式.ppt

    Façade模式在J2EE中也扮演着重要角色,特别是在会话Bean与实体Bean的交互中。会话Bean作为一个门面类,调用多个实体Bean,减少了客户端与多个实体Bean的直接交互,提高了性能,同时也简化了系统结构,使其更容易...

    设计模式实现代码

    13. **门面模式(Façade)**:与外观模式类似,简化多个子系统之间的交互,提供一个简单的统一接口。 14. **职责链模式(Chain of Responsibility)**:避免对象之间耦合度过高,让多个对象都有可能处理请求,形成...

    java 23种设计模式的类图

    13. **门面模式(Façade)**:和外观模式类似,简化复杂的系统接口,对外只暴露一个简单的接口。 14. **职责链模式(Chain of Responsibility)**:避免将请求的发送者和接收者耦合在一起,使得多个对象都有可能...

    高清,经典书籍-->设计模式

    13. **门面模式(Façade)**:与外观模式相似,但更强调简化对子系统的访问,隐藏子系统的复杂性。 14. **职责链模式(Chain of Responsibility)**:将请求的发送者和接收者解耦,多个对象都有可能处理一个请求,...

    C#23种设计模式源代码

    13. **门面模式(Façade)**:同外观模式,是同一概念的不同表述。 14. **职责链模式(Chain of Responsibility)**:将请求的发送者和接收者解耦,使得多个对象都有可能处理请求,形成一条处理链。 15. **命令...

    23种设计模式java实现

    13. **门面模式(Façade)**:是外观模式的另一种表述,简化了客户端与复杂系统之间的交互。 14. **模板方法模式(Template Method)**:在一个抽象类中定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。...

    C#最全经典设计模式Demo.zip

    13. **门面模式(Façade)**:为一组复杂的接口提供一个一致的界面,降低了客户端使用的难度。 14. **责任链模式(Chain of Responsibility)**:避免将处理请求的发送者和接收者耦合在一起,使得多个对象都有可能...

    Head.First设计模式--22~39.rar.pdf (C#)

    13. **门面模式**(Façade):此模式与33章的外观模式类似,用于提供一个简单的接口,隐藏复杂系统的细节。 14. **状态模式**(State):34章介绍了状态模式,它允许对象在其内部状态改变时改变它的行为。C#中,...

    23种设计模式的源代码

    13. **门面模式(Façade)**:同上,为子系统提供一个统一的接口,简化客户端与子系统之间的交互。 14. **模板方法模式(Template Method)**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以...

    HeadFirstDesignPattern(深入浅出设计模式)源码

    13. **门面模式** (Façade): 类似于外观模式,但更专注于简化特定子系统的外部接口。 14. **状态模式** (State): 允许对象在其内部状态改变时改变其行为。在"headfirst"中,你可能会看到如何通过状态对象来管理...

    c++ Design-Patterns.rar

    9. **门面模式(Façade)**:与外观模式类似,也是为子系统提供一个简单的接口,但更强调是对外部系统的封装。 10. **代理模式(Proxy)**:为其他对象提供一种代理以控制对这个对象的访问。 11. **桥接模式...

    Design Patterns中英文版

    13. **门面模式(Façade)**:与外观模式类似,为一个复杂的子系统提供一个简单的接口。 14. **模板方法模式(Template Method)**:在抽象类中定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以...

Global site tag (gtag.js) - Google Analytics