- 浏览: 14250 次
- 性别:
- 来自: 北京
最新评论
为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。通过这个模式我们能够更容易地使用一个复杂的系统,要么只使用系统的一部分功能,要么是以特殊方式使用系统。这里我们的系统就很复杂,但我们只需要使用一部分功能。因此,我们最后得到了一个更简单、更容易使用,或者说按我们的需要量身订做的系统。
大多数工作还是需要由底层系统完成。Facade模式提供了一组容易理解的方法,这些方法使用底层系统来实现新定义的函数。
facade模式:关键特征
意图 希望简化原有系统的使用方式。需要定义自己的接口。
问题 只需要使用某个复杂系统的子集,或者,需要以一种特殊的方式与系统交互。
解决方案 Facade为原有系统的客户提供了一个新的接口。
参与者与协作者 为客户提供的一个简化接口,使系统更容易使用。
效果 Facade模式简化了对所需子系统的使用过程。但是,由于Facade并不完整,因此客户可能无法使用某些功能。
实现
定义一个(或多个)具备所需接口的新类。
让新的类使用原有的系统。
Facade不仅可以用来通过方法调用创建更简单的接口,还能用来减少客户必须处理的对象数量。例如,假设有一个Client对象必须处理Database、Model、Element对象。Client必须首先通过Database对象打开数据库,获取Model对象,然后再查询Model对象,获取Element对象,最后请求Element对象的信息。如果能够创建一个可供Client查询的Database Facade,那么以上过程将容易得多(参见图6-4)。
如果Facade能够设计成无状态的(也就是说,其中没有存储状态),则一个Facade对象就能够被多个其他对象使用。在后面的第21章中,我将讲述如何实现这一点,其中用到了Singleton模式和Double-Checked Locking模式。
Facade模式提出了一种通用方法;它为我提供了起点。这个模式的Facade部分实际上就是创建了一个新的接口供客户使用,来代替系统的原有接口。我之所以能够这样做,是因为Client对象并不需要原系统提供的所有功能。
Facade模式还可以用来隐藏或者封装系统。Facade类能够将系统作为自己的私有成员包含进来。在此情况下,原系统将与Facade类联系起来,但Facade类的客户无需看到。
封装系统的原因很多,包括:
● 跟踪系统的使用情况——通过强制所有对系统的访问都必须经过 Facade,可以很容易地监视系统的使用情况。
● 改换系统——未来可能需要切换系统。通过将原系统作为 Facade 类的一个私有成员,可以最省力地将切换到新的系统。当然,可能还要做很多工作,但是至少我只需在一个地方修改代码(Facade类)就行了。
Facade的几个要点:
从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Façade接口的变化。
Façade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Façade很多时候更是一种架构设计模式。
Façade设计模式并非一个集装箱,可以任意地放进任何多个对象。Façade模式中组件的内部应该是“相互耦合关系比较大的一系列组件”,而不是一个简单的功能集合。
注意区分Façade模式、Adapter模式、Bridge模式与Decorator模式。Façade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。
适用性:
1.为一个复杂子系统提供一个简单接口。
2.提高子系统的独立性。
3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
实例:
门面模式应用背景:为复杂的子系统提供一个简单的接口
门面模式包括两种角色:门面角色和子系统角色.
门面角色:客户端可以调用的方法,此角色知晓一个或者多个子系统角色的功能和责任
子系统角色:可以同时包括一个或者多个子系统角色,不是单独的一个类,而是类的集合
下面看一个例子:
门卫通常需要操作多种仪器,包括每种仪器的具体操作,这样子来说对于门卫来说工作量就增加了很多
出错的概率也变大了,一个合理的设计就是,为门卫设计一个统一控制的操作台,简化门卫的工作。
请看代码:
Client.java
下面几个类的角色是子系统角色
Ring.java
public class Ring {
public void run(){
System.out.println("门铃启动");
}
public void stop(){
System.out.println("门铃停止");
}
}
Sensor.java
public class Sensor {
public void run(){
System.out.println("监视器启动");
}
public void stop(){
System.out.println("监视器停止");
}
}
SecurityFacade.java
大多数工作还是需要由底层系统完成。Facade模式提供了一组容易理解的方法,这些方法使用底层系统来实现新定义的函数。
facade模式:关键特征
意图 希望简化原有系统的使用方式。需要定义自己的接口。
问题 只需要使用某个复杂系统的子集,或者,需要以一种特殊的方式与系统交互。
解决方案 Facade为原有系统的客户提供了一个新的接口。
参与者与协作者 为客户提供的一个简化接口,使系统更容易使用。
效果 Facade模式简化了对所需子系统的使用过程。但是,由于Facade并不完整,因此客户可能无法使用某些功能。
实现
定义一个(或多个)具备所需接口的新类。
让新的类使用原有的系统。
Facade不仅可以用来通过方法调用创建更简单的接口,还能用来减少客户必须处理的对象数量。例如,假设有一个Client对象必须处理Database、Model、Element对象。Client必须首先通过Database对象打开数据库,获取Model对象,然后再查询Model对象,获取Element对象,最后请求Element对象的信息。如果能够创建一个可供Client查询的Database Facade,那么以上过程将容易得多(参见图6-4)。
如果Facade能够设计成无状态的(也就是说,其中没有存储状态),则一个Facade对象就能够被多个其他对象使用。在后面的第21章中,我将讲述如何实现这一点,其中用到了Singleton模式和Double-Checked Locking模式。
Facade模式提出了一种通用方法;它为我提供了起点。这个模式的Facade部分实际上就是创建了一个新的接口供客户使用,来代替系统的原有接口。我之所以能够这样做,是因为Client对象并不需要原系统提供的所有功能。
Facade模式还可以用来隐藏或者封装系统。Facade类能够将系统作为自己的私有成员包含进来。在此情况下,原系统将与Facade类联系起来,但Facade类的客户无需看到。
封装系统的原因很多,包括:
● 跟踪系统的使用情况——通过强制所有对系统的访问都必须经过 Facade,可以很容易地监视系统的使用情况。
● 改换系统——未来可能需要切换系统。通过将原系统作为 Facade 类的一个私有成员,可以最省力地将切换到新的系统。当然,可能还要做很多工作,但是至少我只需在一个地方修改代码(Facade类)就行了。
Facade的几个要点:
从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Façade接口的变化。
Façade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Façade很多时候更是一种架构设计模式。
Façade设计模式并非一个集装箱,可以任意地放进任何多个对象。Façade模式中组件的内部应该是“相互耦合关系比较大的一系列组件”,而不是一个简单的功能集合。
注意区分Façade模式、Adapter模式、Bridge模式与Decorator模式。Façade模式注重简化接口,Adapter模式注重转换接口,Bridge模式注重分离接口(抽象)与其实现,Decorator模式注重稳定接口的前提下为对象扩展功能。
适用性:
1.为一个复杂子系统提供一个简单接口。
2.提高子系统的独立性。
3.在层次化结构中,可以使用Facade模式定义系统中每一层的入口。
实例:
门面模式应用背景:为复杂的子系统提供一个简单的接口
门面模式包括两种角色:门面角色和子系统角色.
门面角色:客户端可以调用的方法,此角色知晓一个或者多个子系统角色的功能和责任
子系统角色:可以同时包括一个或者多个子系统角色,不是单独的一个类,而是类的集合
下面看一个例子:
门卫通常需要操作多种仪器,包括每种仪器的具体操作,这样子来说对于门卫来说工作量就增加了很多
出错的概率也变大了,一个合理的设计就是,为门卫设计一个统一控制的操作台,简化门卫的工作。
请看代码:
Client.java
/* * 客户端通过安全门面来调用各个子系统 * 客户端角色 */ public class Client { public static void main(String[] args){ SecurityFacade sf = new SecurityFacade(); sf.active(); sf.inactive(); }}
下面几个类的角色是子系统角色
Camera.java /* * 子系统角色,是一个功能的集合,一般是很多类的一个集合 */ public class Camera { public void run(){ System.out.println("摄像机启动"); } public void stop(){ System.out.println("摄像机停止"); } }
Ring.java
public class Ring {
public void run(){
System.out.println("门铃启动");
}
public void stop(){
System.out.println("门铃停止");
}
}
Sensor.java
public class Sensor {
public void run(){
System.out.println("监视器启动");
}
public void stop(){
System.out.println("监视器停止");
}
}
SecurityFacade.java
/* * 门面角色 */ public class SecurityFacade { private Camera camera; private Ring ring; private Sensor sensor; public SecurityFacade(){ camera = new Camera(); ring = new Ring(); sensor = new Sensor(); } public void active(){ camera.run(); ring.run(); sensor.run(); } public void inactive(){ camera.stop(); ring.stop(); sensor.stop(); } }
发表评论
-
java中replace和replaceAll的区别
2012-03-12 16:07 699replace和replaceAll是JAVA中 ... -
java设计模式一览
2012-02-29 15:14 727按照目的来分,设计模式可以分为创建型模式、结构型模式和行为型模 ... -
java23种设计模式中最常用的9种
2012-02-29 15:12 24081 Factory Pattern(工厂模式) 上 ... -
The Open-Closed Principle (OCP) - OO设计的开闭原则---类设计原则
2012-02-29 15:07 759Software entities (classes, mod ... -
java设计模式—工厂模式Factory
2012-02-29 14:32 726一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体 ... -
深入理解java多态性 .
2012-02-22 10:54 579(一)相关类 class A ... ... -
类的封装
2012-02-22 10:40 805类的封装可以实现: 1、隐藏类的实现细节。 2、让使用 ... -
用java调用oracle存储过程总结
2012-02-21 17:23 6481、什么是存储过程。存 ... -
何时适合使用单例模式
2012-02-10 17:14 874单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢 ... -
java中更好的单例模式实现
2012-02-10 16:10 6801、相应的基础知识 先 ... -
双重枷锁机制
2012-02-10 15:56 1360所谓双重检查加锁机制,指的是:并不是每次进入getInstan ... -
java接口
2012-02-10 13:36 0一直对接口的应用不是很理解,最近研究了一些资料后,总结如下: ... -
java中static作用详解
2012-02-09 15:39 645static表示“全局”或者“静态”的意思,用来修饰成员变量和 ... -
Java 封装机制(转)
2012-02-09 14:36 1401封装是面向对象系统的一个重要特性,是抽象数据类型思 ... -
Factory Method模式在Javamail中的应用(转)
2012-02-09 10:53 900简介: 设计模式在软 ...
相关推荐
JAVA设计模式是编程领域中非常重要的概念,它为软件开发人员提供了在特定情境下解决常见问题的模板。设计模式公司出品的《JAVA设计模式》书籍,详细介绍了多种设计模式,适合不同水平的程序员学习和使用。 首先,...
### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...
设计模式之门面模式(Facade模式),介绍门面模式,实际例子分析,代码讲解等
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...
### 知识点二:Java设计模式的种类 根据提供的部分内容,可以看出本书涉及到多种设计模式,其中包含但不限于: 1. **策略模式(StrategyPattern)**:定义一系列算法,将每个算法封装起来,并使它们可相互替换。...
Java培训课程中的设计模式部分主要关注创建型模式,这类模式主要处理对象的创建、组合和表示,使得系统能够独立于这些细节。以下是几种重要的创建型设计模式的详细说明: 1. **Abstract Factory**(抽象工厂): ...
门面模式(Facade Pattern)是软件工程中一种常用的设计模式,属于结构型模式,它提供了一个统一的接口,用于访问子系统中的一组接口。在面向对象设计中,门面模式为子系统提供了更简单的接口,使得客户端可以更容易...
标题“java设计模式资源下载”和描述“策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式、观察者模式、适配器模式、门面模式、桥梁模式”指向了设计模式这一软件工程中至关重要的概念。...
什么是门面模式(Facade) 外部与一个子系统的通信必须通过一个统一的门面对象进行。这就是门面模式。 门面模式的结构 涉及两个角色: 门面角色:客户端可以调用这个角色的方法。此角色知道子系统的功能和责任。在...
Facade模式,也称为门面模式,是一种结构型设计模式,它提供了一个统一的接口,用于与复杂的子系统进行交互。这个模式简化了客户端与子系统之间的交互,使得客户端只需要知道一个简单的接口,而无需了解子系统的内部...
### Java设计模式详解 #### 一、创建型模式 **1. 工厂方法模式(Factory Method)** - **定义**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 - **应用场景*...
### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...
Java设计模式中的中介者模式是一种行为设计模式,其主要目的是减少对象之间的直接依赖关系,从而降低系统的耦合度。在日常生活中,我们常常能看到房屋中介、留学中介等,它们作为一个中间方,帮助各方进行沟通和协调...
《Java设计模式》是一本详尽介绍Java设计模式的电子书,旨在帮助不同层次的开发者提升他们的编程设计能力。本书涵盖了23种经典的设计模式,包括策略模式、代理模式、单例模式、多例模式等,旨在让读者理解如何编写出...
门面模式(Facade Pattern)是软件工程中一种常用的结构型设计模式,它的主要目的是提供一个统一的接口,用来简化系统中一组复杂的接口或类的使用。这个模式将复杂的子系统接口封装在一个简单的门面对象中,使得...