文档章节

Facade外观模式

ruyees
 ruyees
发布于 2014/10/05 11:47
字数 505
阅读 14
收藏 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
590
1
5、外观模式

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

晚天吹凉风
02/28
0
0
Web中的积累:外观模式 Facade

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

泥沙砖瓦浆木匠
2014/10/05
0
0
C#设计模式之外观模式(Facade Mode)

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

GoodWin
2013/12/28
0
0
【08】结构型-外观Facade模式

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

xixicat
2014/06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
17分钟前
0
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
26分钟前
4
0
Eos测试框架EosFactory

EOS Factory包含一个完整的EOS测试框架,可以进行智能合约的开发和测试。由Tokenika于创建于2017年的这个基于Python的EOS测试框架可以轻松地完成智能合约的开发、部署与测试。 如果你希望马上...

汇智网教程
41分钟前
5
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
4
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部