文档章节

Facade外观模式

ruyees
 ruyees
发布于 2014/10/05 11:47
字数 505
阅读 14
收藏 0
点赞 0
评论 0

Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。在这里我想举一个例子:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统1),使四个车轮(子系统2)转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作使车轮转动。油门就好比系统给我们留下的接口,不论汽车是以何种方式转动车轮,车轮变化成什么牌子的,我们要开走汽车所要做的还是踩下油门。

 

GoF《设计模式》中说道:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

 

Façade外观模式的结构大概是这样的:

我就上面说的那个情形写一下实现代码,首先我们要实现三个子系统(WheelEngineBody):

 

package facade.childclass;

//子系统1-Engine
public class Engine {
	public String EngineWork(){
		return "Engine is Working ~~~";
		}
	public String EngineStop(){
		return "Engine is stoped !!!";
		}
	}

 

package facade.childclass;

//子系统2-Wheel
public class Wheel {
	public String WheelCircumrotate(){
		return "Wheel is Circumrotating ~~~";
		}
	
	public String WheelStop(){
		return "Wheel is stoped !!!";
		}
	}

 

package facade.childclass;


public class Body {
	// 车体由一个引擎和四个轮子构成
	public Wheel[] wheels = new Wheel[4];
	public Engine engine = new Engine();
	public Body()
	{
		for (int i = 0; i < wheels.length; i++){
			wheels[i] = new Wheel();
			}
		}
	}

 

package facade;

import facade.childclass.Body;

// 应用外观模式
public class CarFacade {
	Body body = new Body();
	
	public void Run(){
		System.out.println(body.engine.EngineWork());
		
		for(int i = 0; i < body.wheels.length; i++){
			System.out.println(body.wheels[i].WheelCircumrotate());
			}
		}
	
	public void Stop(){
		System.out.println(body.engine.EngineStop());
		for (int i = 0; i < body.wheels.length; i++){
			System.out.println(body.wheels[i].WheelStop());
			}
		}
	}

 

 

package facade;

public class ProgramTest {
	public static void main(String[] args) {
		CarFacade car = new CarFacade();
		
		System.out.println("=========== 启动Car ===========");
		car.Run();
		System.out.println("=========== 停止Car ===========");
		car.Stop();
	}
}

 

 

本文转载自:http://zuoqiang.iteye.com/blog/735362

共有 人打赏支持
ruyees
粉丝 3
博文 71
码字总数 0
作品 0
深圳
产品经理
【白话设计模式二】外观模式(Facade)

白话设计模式 工厂模式 单例模式 【白话设计模式一】简单工厂模式(Simple Factory) 【白话设计模式二】外观模式(Facade) 【白话设计模式三】适配器模式(Adapter) 【白话设计模式四】单例模式...

陶邦仁 ⋅ 2016/02/15 ⋅ 1

java外观模式

其他设计模式 java单例模式 java建造者模式 java策略模式 java代理模式 java观察者模式 java适配器模式 java外观模式 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义...

zzqFive ⋅ 01/09 ⋅ 0

5、外观模式

定义: 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 角色: 1,外观(Facade)角色 :客户端可以调用这个角色的方法。此角...

晚天吹凉风 ⋅ 02/28 ⋅ 0

Web中的积累:外观模式 Facade

Web中的积累:外观模式 Facade 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 壹 前言 目测好久没写文章了,距离上一篇文章也有二十多天。我...

泥沙砖瓦浆木匠 ⋅ 2014/10/05 ⋅ 0

Java设计模式

设计模式就是一组成熟的解决方案 简单工厂模式(SimpleFactory) 定义: 提供一个创建对象实例的功能,而无须关系其具体实现.被创建实例的类型可以是接口/抽象类/具体类. 优点: 1.帮助封装 非常友...

Carl_ ⋅ 2015/06/16 ⋅ 0

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

背景 一个坦克系统,子系统是履带系统,发动机系统,火炮系统,防卫装甲系统等。对外的接口就是暴露给使用人员的是Run(), shot(), stop()等。如果没有采用Facade模式,开动坦克需要直接依赖履...

learn_more ⋅ 2015/06/10 ⋅ 2

C#设计模式之外观模式(Facade Mode)

外观模式 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 例子(引用于大话设计模式) 子系统类代码如下: class SubSystemOne { publ...

GoodWin ⋅ 2013/12/28 ⋅ 0

【08】结构型-外观Facade模式

一、上下文及问题 1、基本原则 系统与其他外部系统交互,有时候操作比较复杂,需要一个防腐层来增强本系统与其他系统的耦合性,对本系统封装一些对外操作的细节,达到简化的目的。 符合最少知...

xixicat ⋅ 2014/06/21 ⋅ 0

设计模式详解之外观模式

外观模式(Facade):外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的...

eclipse_xu ⋅ 2013/03/15 ⋅ 0

java设计模式之外观模式(门面模式)

针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。 一、概念介绍   外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接...

小麋鹿666 ⋅ 2017/01/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 21分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 31分钟前 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 49分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 57分钟前 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部