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
分享到:
相关推荐
JAVA-设计模式-结构型模式-外观模式
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。外观模式使子系统更容易被使用,因为它为复杂的子系统提供了一个简单的接口,客户端可以通过这个接口与子...
本实验报告主要探讨了五个关键的设计模式:组合模式、外观模式、代理模式、观察者模式以及策略模式,这些都是软件体系结构中的重要组成部分,对于理解和优化代码结构具有深远影响。 1. **组合模式**: 组合模式是一...
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-观察者...
#### 五、设计模式解决设计问题的方法 **如何通过设计模式解决问题:** 设计模式能够帮助开发者更高效地解决问题,具体表现在: - **识别问题**:通过明确问题的本质,可以更容易地找到合适的模式。 - **选择合适...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...
**外观模式(Facade Pattern)**是面向对象设计模式中的一种结构型模式,它提供了一个统一的接口,用于访问子系统中的各个部分。在C#编程中,外观模式可以帮助我们简化复杂的系统接口,使得客户端代码与复杂的内部...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是为了解耦系统,提供一个统一的入口,使得客户端可以更容易地使用复杂的子系统。在Java中,外观模式通常用于简化对复杂系统的访问,它创建了...
**外观模式(Facade Pattern)**是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的接口,使得客户端可以更容易地使用这个系统。在Java编程中,外观模式的应用广泛,尤其是在处理...
在软件设计模式和软件体系结构中,遵循了五个基本原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则指导了软件设计和开发的方向,帮助开发者设计和实现高质量的软件系统。
孙云山老师的“软件设计模式与体系结构”课程深入探讨了这些模式及其在构建复杂系统中的应用。本资料集合包含了课后习题的第234章答案,这将有助于学生深化对设计模式的理解,并提升其实际应用能力。 设计模式是...
今天我们要探讨的是“Java设计模式之结构型模式”。结构型模式主要关注如何组织类和对象,以达到良好的架构,提升代码的可读性和可维护性。在这个主题中,我们将深入理解并讨论这些模式的原理、应用场景及其实现。 ...
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口来访问复杂系统中的子系统,从而隐藏了子系统的复杂性。外观模式属于对象型模式,它通过创建一个外观类,将客户端与子系统解耦,使得客户端...
这是JAVA设计模式中属于结构模式的部分,包括Flyweight(共享模式)、Bridge(桥模式)、Decorator(装饰模式)、Composite(组合模式)、Adapter(适配器模式)、Proxy(代理模式)、Facade (外观模式)的源代码。其中有些模式中...
设计模式是解决软件开发中常见问题的经验总结,是软件工程的最佳实践之一。本手册将详细阐述23种经典设计模式,并结合C#语言特性,给出具体实现和应用示例。 首先,我们来了解一下设计模式的基本概念。设计模式是...
2. 结构型模式:这类模式处理对象组合和结构,如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式和享元模式。在JavaScript中,装饰器模式尤其受到重视,它可以在不修改原有对象的基础上动态地添加...