`
zddava
  • 浏览: 243685 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

了解设计模式 之 结构模式(五) -- 外观模式

阅读更多
5. 外观模式(Facade Pattern)

外观模式在结构上并不复杂,就是给内部的子系统提供一个统一的接口,来举一个现实点的例子。

还是举方便面厂的例子吧(其实我不喜欢吃方便面的)。方便面的生产流程是很复杂的,包括和面机去和面,面饼要压片,蒸熟,然后是切割面饼,然后油炸,之后是冷却,然后加入调料包等等自动包装。这个过程如果用Java语言描述的话是很复杂的,会包括很多类和方法。就上边所说的过程而言,包括的类有:MixingMachine(和面机),RollingMachine(压片机),CookingMachine(蒸熟机),CuttingMachine(切割面饼机),FryingMachine(油炸机),CoolingMachine(冷却机),PackingMachine(自动包装机)。这样,当客户端要调用这些机器去生产方便面的时候,代码应该是类似这样的:

	public class Client {

		public static void main(String[] args) {
			// 生产方便面所用的机器对象的初始化

			// 和面
			mixingMachine.mix();
			// 压片
			rollingMachine.roll();
			// 蒸熟
			cookingMachine.cook();
			// 切割面饼
			cuttingMachine.cut();
			// 油炸
			fryingMachine.fry();
			// 冷却
			coolingMachine.cool();
			// 自动包装
			packingMachine.pack();

		}

	}


那么每生产一袋方便面都要重复这样一个复杂的过程,这个时候,可以使用外观模式来简化这个过程,首先定义一个外观类:

	public class InstantNoodleFacade {
		private MixingMachine mixingMachine;
		private RollingMachine rollingMachine;
		private CookingMachine cookingMachine;
		private CuttingMachine cuttingMachine;
		private FryingMachine fryingMachine;
		private CoolingMachine coolingMachine;
		private PackingMachine packingMachine;

		public InstantNoodleFacade(MixingMachine mixingMachine, RollingMachine rollingMachine,
				CookingMachine cookingMachine, CuttingMachine cuttingMachine,
				FryingMachine fryingMachine, CoolingMachine coolingMachine,
				PackingMachine packingMachine) {
			this.mixingMachine = mixingMachine;
			this.rollingMachine = rollingMachine;
			this.cookingMachine = cookingMachine;
			this.cuttingMachine = cuttingMachine;
			this.fryingMachine = fryingMachine;
			this.coolingMachine = coolingMachine;
			this.packingMachine = packingMachine;
		}

		public void makeInstantNoodle() {
			// 和面
			mixingMachine.mix();
			// 压片
			rollingMachine.roll();
			// 蒸熟
			cookingMachine.cook();
			// 切割面饼
			cuttingMachine.cut();
			// 油炸
			fryingMachine.fry();
			// 冷却
			coolingMachine.cool();
			// 自动包装
			packingMachine.pack();
		}
	}


这个Facade对每个机器的动作进行了封装,并提供了统一的接口#makeInstantNoodle()来实现方便面的生产。

下面来看一下是用了Facade的客户端代码:

	public class Client {

		public static void main(String[] args) {
			// 生产方便面所用的机器对象的初始化
			
			InstantNoodleFacade facade = new InstantNoodleFacade(......);
			facade.makeInstantNoodle();

		}

	}


这样,就通过外观模式实现了一个简单的用户视图,实现了复杂子系统的简化。

除此之外,还可以在子系统和客户端之间加入一个Facade来解耦,让子系统拥有更好的独立性和可移植性,并且可以简化它们之间的依赖。

最后给出外观模式的类图:

  • 大小: 11.1 KB
分享到:
评论
1 楼 IceWee 2012-06-28  
看来还是外观模式最好理解啊,就是把一切实现全封装到一个类中

相关推荐

    JAVA-设计模式-结构型模式-外观模式

    JAVA-设计模式-结构型模式-外观模式

    设计模式专题之(十一)外观模式---设计模式外观模式示例代码(python--c++)

    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。外观模式使子系统更容易被使用,因为它为复杂的子系统提供了一个简单的接口,客户端可以通过这个接口与子...

    软件体系结构实验报告--设计模式2

    本实验报告主要探讨了五个关键的设计模式:组合模式、外观模式、代理模式、观察者模式以及策略模式,这些都是软件体系结构中的重要组成部分,对于理解和优化代码结构具有深远影响。 1. **组合模式**: 组合模式是一...

    c++设计模式-结构型模式-外观模式

    c++设计模式-结构型模式-外观模式;qt工程;c++简单源码; 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,...

    软件设计模式与体系结构(讲解+代码)

     【例3.10】外观模式-安全系统  【例3.11】外观模式-椭圆功能  【例3.13】桥接模式-茶水机系统  【例3.14】桥接模式-几何立体体积  【例4.1】迭代器模式-矩阵搜索  【例4.2】迭代器模式-产品搜索  ...

    设计模式之外观模式案例代码

    **外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以不关心内部的复杂性,只通过这个接口与子系统进行交互。这种模式降低了系统的复杂度,提高了代码的...

    设计模式课件大全

    设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    #### 五、设计模式解决设计问题的方法 **如何通过设计模式解决问题:** 设计模式能够帮助开发者更高效地解决问题,具体表现在: - **识别问题**:通过明确问题的本质,可以更容易地找到合适的模式。 - **选择合适...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

    C#面向对象设计模式纵横谈(11):Facade 外观模式(结构型模式) (Level 300)

    **外观模式(Facade Pattern)**是面向对象设计模式中的一种结构型模式,它提供了一个统一的接口,用于访问子系统中的各个部分。在C#编程中,外观模式可以帮助我们简化复杂的系统接口,使得客户端代码与复杂的内部...

    设计模式之外观模式

    外观模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是为了解耦系统,提供一个统一的入口,使得客户端可以更容易地使用复杂的子系统。在Java中,外观模式通常用于简化对复杂系统的访问,它创建了...

    设计模式--外观模式java例子

    **外观模式(Facade Pattern)**是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的接口,使得客户端可以更容易地使用这个系统。在Java编程中,外观模式的应用广泛,尤其是在处理...

    软件设计模式作业+答案

    在软件设计模式和软件体系结构中,遵循了五个基本原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则指导了软件设计和开发的方向,帮助开发者设计和实现高质量的软件系统。

    软件设计模式与体系结构孙云山课后习题234章答案.zip

    孙云山老师的“软件设计模式与体系结构”课程深入探讨了这些模式及其在构建复杂系统中的应用。本资料集合包含了课后习题的第234章答案,这将有助于学生深化对设计模式的理解,并提升其实际应用能力。 设计模式是...

    Java设计模式之结构型模式源码以及文档

    今天我们要探讨的是“Java设计模式之结构型模式”。结构型模式主要关注如何组织类和对象,以达到良好的架构,提升代码的可读性和可维护性。在这个主题中,我们将深入理解并讨论这些模式的原理、应用场景及其实现。 ...

    java常用设计模式-外观模式

    外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口来访问复杂系统中的子系统,从而隐藏了子系统的复杂性。外观模式属于对象型模式,它通过创建一个外观类,将客户端与子系统解耦,使得客户端...

    JAVA设计模式之结构模式

    这是JAVA设计模式中属于结构模式的部分,包括Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade (外观模式)的源代码。其中有些模式中...

    新版设计模式手册 - C#设计模式(第二版)

    设计模式是解决软件开发中常见问题的经验总结,是软件工程的最佳实践之一。本手册将详细阐述23种经典设计模式,并结合C#语言特性,给出具体实现和应用示例。 首先,我们来了解一下设计模式的基本概念。设计模式是...

    JavaScript 设计模式(高清扫描版本)- 张容铭

    2. 结构型模式:这类模式处理对象组合和结构,如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式。在JavaScript中,装饰器模式尤其受到重视,它可以在不修改原有对象的基础上动态地添加...

Global site tag (gtag.js) - Google Analytics