java 设计模式 学习笔记(10) 外观模式

本文介绍外观模式,一种简化复杂系统接口的设计模式。通过创建一个外观类Facade,将多个子系统的操作封装成单一接口,减少代码耦合,便于管理和维护。以餐厅套餐为例,演示如何使用外观模式组织不同厨师的职责,简化客户点餐流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

外观模式:

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

有一个面向客户代码的外观类Facade,该外观类向客户代码提供了一组接口,每一接口可能封装了子系统的一系列操作,但是一系列的操作对客户代码是隐藏的,而对于外观类则是开放的。

 

通俗的说:假设客户代码为了实现某个功能,需要从多个子系统中调用多个方法。如果直接调用,那么将极大增强了代码间的耦合性,同时也为代码的后期维护埋下了很大的隐患,加大了后期维护的成本。这个时候,使用外观类,该外观类保存了需要使用到的所有子系统的引用,并根据客户代码的不同需求,将一组子类的某些操作封装成一个简单的接口提供给客户代码使用。

 

现在用实际例子来描述外观模式的用处:

假设公司附近一家餐厅里有三位厨师,分别专攻肉类,蔬菜类,汤类。该餐厅根据多数人的用餐需求,将食物归类成套餐的形式供应给上班族。

上班族只需要告诉Waiter 自己需要哪个套餐就能在一次点餐过程中完成对肉类蔬菜类和汤类食物的订制。

在这里,我们可以将三位厨师看成是三个不同的子系统,Waiter 是Facade 外观,Waiter 从厨师那里获得不同的食物并组合成相应的套餐来供应为顾客,相当于将三分食物包含在一个接口里,并提供为顾客

1. 定义一个MeatCook 厨师类,该厨师主要负责烹饪肉类食物

 

 

2.再分别创建 VegetableCook 和 SoupCook 类,这两个厨师分别负责 蔬菜和汤的烹饪

 

 

 

 

3.创建 外观类Waiter 。 Waiter 类保存了 三个子系统(COOK) 的引用,并为客户代码提供两个接口。

 

 

 

4. 编写测试代码来验证代码的正确性:

   测试代码要求Waiter 分别提供 套餐A 和 套餐B

 

 

 

结果输出:

    beef

eggSoup

cabbage

-----------------

pork

eggSoup

potato

 

 

 

通过实验结果我们可以看到,外观 的作用就是将其他多个类得多个操作封装成一个简单的接口提供给客户代码。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值