设计模式【外观模式】

外观模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行交互。故此会要求提供一个高层次的接口使得子系统更易于使用。

相关角色

1、外观(Facade)角色,客户端调用这个对象的方法,此角色知晓相关子系统的功能与职责。通过此对象的方法可以完成子系统中一系列的操作。

2、子系统角色:可以同时包含一个或多个子系统。每个子系统都不是一个单独的类,而是一些类的集合。每个子系统都可以被客户端直接调用,或者被外观角色调用。

适用情况

1. 为复杂的子系统提供一个简单的接口;

2. 客户程序与多个抽象类的实现部分之间存在着很大的依赖性;

3. 构建一个层次结构的子系统时,适用采用外观模式定义子系统中每层的入口。

【转载使用,请注明出处:http://blog.csdn.net/mahoking

演示案例

本例以煤气灶(Gas Cooker)的启动过程为例,打开(open)煤气灶时,供气(Gas)、点火(Flint),接下来开始做饭(cooke)吧!

public class Gas {

	/**
	 * 供气操作
	 */
	public void supplyGas() {

		System.out.println("供气系统供气。。。。。。");
	}
}

public class Flint {

	/**
	 * 点火操作
	 */
	public void ignite() {

		System.out.println("点火系统点火。。。。。。");
	}
}

public class GasCooker {

	private static Gas gas = null;
	private static Flint flint = null;

	static{
		gas = new Gas();
		flint = new Flint();
	}

	/**
	 * 打开煤气灶
	 */
	public void open() {

		gas.supplyGas();
		flint.ignite();
		System.out.println("####开始做饭吧!####");
	}
}

public class Client {

	public static void main(String[] args) {
		GasCooker gasCooker = new GasCooker();
		gasCooker.open();
	}
}

拓展对比

1. 当需要使用一个现有的类的接口不符合需要时,需要使用适配器模式;

2. 当需要简化一系列或复杂的接口调用时,需要使用外观模式;

3. 适配器模式改变接口以符合功能的需求;

4. 外观模式将客户从一些复杂的子系统中解耦;

5. 适配器模式将一个对象包装起来以改变其接口;装饰模式将一个对象包装起来以加上新的行为与职责;而外观模式将一系列子系统包含的对象整合在一个对象内以简化其接口。

【转载使用,请注明出处:http://blog.csdn.net/mahoking

参考资料

1、 http://blog.csdn.net/cai1213/article/details/8001228

2、 http://liyf155.iteye.com/blog/1189789

3、 http://wy1178037136.blog.163.com/blog/static/1844941972012101433048828/

时间: 2024-10-22 16:22:11

设计模式【外观模式】的相关文章

设计模式 - 外观模式(facade pattern) 详解

外观模式(facade pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 外观模式(facade pattern): 提供了一个统一的接口, 用来访问子系统中的一群接口. 外观定义了一个高层接口, 让子系统更容易使用. 外观模式包含三个部分: 1. 子系统: 子类, 单个复杂子类 或 多个子类; 2. 外观(facade)类: 把子系统设计的更加容易使用; 3. 客户: 只需要调用外观类. 与适配器模式(adapter pattern)的

设计模式 外观模式 一键电影模式

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是为了方便客户的使用,把一群操作,封装成一个方法. 举个例子:我比较喜欢看电影,于是买了投影仪.电脑.音响.设计了房间的灯光.买了爆米花机,然后我想看电影的时候,我需要

浅谈Python设计模式 - 外观模式

声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 外观模式 外观模式的核心在于将复杂的内部实现包装起来,只向外界提供简单的调用接口.类似现实世界中的电脑,开机按钮可以说就是一个简单的调用接口,帮用户屏蔽了复杂的内部电路. 外观设计模式 -- 有助于隐藏系统的内部复杂性,并且通过一个简化的接口向客户端暴露必要的部分.本质上,外观是在已有复杂系统之上实现的一个抽象层. 本来想引用书中的例子,但是其整个代码被复杂化,不好理解.然后在网上看到一

java语言实现结构型设计模式—外观模式

一.描述 外观模式又叫门面模式,就是对一个复杂的系统进行包装,该系统对外的接口统一由外观类提供.当一个复杂的系统需要对外提供接口时,就需要将对外提供的接口统一封装在一个外观类中供外系统使用.外观模式最大的特点就是将细粒度的对象包装成粗粒度的对象,应用程序通过访问这个外观对象来完成细粒度对象的调用.这样应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. 总的来说,外观模式就是为子系统对外提供的一组接口,这组接口提供一个统一的界面,使得其它

设计模式-外观模式(Facade Pattern)

本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 外观模式简介 外观模式的作用用一句话说就是简化接口,举个例子楼主每次编程的时候都要点开IDE.点开一本电子书.点开音乐播放器.点开QQ,非常的麻烦,如果能有一个一键打开这些所有东西的功能键是不是会很好?这就是外观模式所做的事情. 外观模式的定义和基本结构 定义:外观模式为一个接口众多的子系统提供一个统一的高层接口,使这个子系统更加容易使用. 来自<Head First>里的一张结构图 sub

设计模式 --外观模式(Facade)

什么是外观模式? 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用. 简单点说:外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便. 概述: 在真实的应用系统中,一个子系统可能由很多类组成.子系统的客户为了它们的需要,需要和子系统中的一些类进行交互.客户和子系统的类进行直接的交互会导致客户端对

设计模式-外观模式的理解

外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,使得这一子系统更加容易使用. 在机房收费系统中,外观模式用来解除U层和B层之间的耦合,按着以前的做法,在U层中的功能调用B层中的方法的时候,就需要U层完全了解B层中的方法都有哪些,自己的U层又是需要用到哪一个方法,再调用B层中的方法.这样的做法使得B层的东西完全暴露在了U层中,而且增加了U层和B层两者的耦合程度,B层做出的修改要考虑到U层的调用的问题,不利于系统的安全性.增加的外观模式,把B层中的一组方法都放到外观类Fa

[设计模式] 外观模式facade

外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来.客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构.DP一书的定义:为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.举个编译器的例子,假设编译一个程序需要经过四个步骤:词法分析.语法分析.中间代码生成.机器码生成.学过编译都知道,每一步都很复杂.对于编译器这个系统,就可以使用外观模式.可以定义

小菜学设计模式——外观模式

背景 一个坦克系统,子系统是履带系统,发动机系统,火炮系统,防卫装甲系统等.对外的接口就是暴露给使用人员的是Run(), shot(), stop()等.如果没有采用Facade模式,开动坦克需要直接依赖履带系统,发动机系统.直接去操作履带,操作发动机?各个接口和子系统都产生了紧耦合.(引用自互联网) 问题产生了:组件的客户(接口)和组件内各个复杂子系统有过多的耦合,随着外部客户程序和各个子系统的变化,这种耦合面临着变化的挑战. 如何简化外部客户程序和系统间的交互接口,如何将外部程序的演化和内部

结合Mybatis源码看设计模式——外观模式

定义 提供了一个统一的接口,用来访问子系统中一群接口 适用场景 子系统复杂,增加外观模式提供简单调用接口 构建多层系统结构,用外观对象作为每层入口 详解 外观模式,主要理解外观.通俗一点可以认为这个模式是将子系统封装到一起,提供给应用的层面就提供一个方法.不直接由应用层直接访问子系统.      下面我们看看ibatis的源码来具体理解外观模式. public MetaObject newMetaObject(Object object) { return MetaObject.forObjec