门面模式
来源:互联网 发布:json乱码转换成中文 编辑:程序博客网 时间:2024/05/17 01:12
门面模式(Facade)也被称为正面模式、外观模式,这种模式用于将一组复杂的类包装到一个简单的外部接口中。
假设这样的场景:有一个顾客需要到饭店用餐,这就需要定义一个Customer类,并为该类定义一个haveDinner()方法。考虑饭店有三个部门:收银部、厨师部和服务生部,用户就餐需要这三个部门协调才能完成。UML类图如下。
下面笔者给出实现的类。
定义一个Payment的接口。
public interface Payment{// 模拟顾客支付费用的方法String pay();}
实现这个接口的PaymentImpl的类。
public class PaymentImplimplements Payment{// 实现模拟顾客支付费用的方法public String pay(){String food = "快餐";System.out.println("你已经向收银员支付了费用,您购买的食物是:"+ food);return food;}}
定义一个Cook的接口。
public interface Cook{// 模拟烹调食物的方法String cook(String food);}
实现这个接口的CookImpl类。
public class CookImplimplements Cook{// 实现模拟烹调食物的方法public String cook(String food){System.out.println("厨师正在烹调:" + food);return food;}}
定义个waiter的接口。
public interface Waiter{// 模拟服务生上菜的方法void serve(String food);}实现这个接口的WaitrerImpl的类。
public class WaiterImplimplements Waiter{// 模拟服务生上菜的方法public void serve(String food){System.out.println("服务生已将" + food+ "端过来了,请慢用...");}}为上面的Payment、Cook、Waiter三个部门提供一个门面(Facade),使用该Facede来包装这些类,对外提供一个简单的访问方法。
public class Facade{// 定义被Facade封装的三个部门Payment pay;Cook cook;Waiter waiter;// 构造器public Facade(){this.pay = new PaymentImpl();this.cook = new CookImpl();this.waiter = new WaiterImpl();}public void serveFood(){// 依次调用三个部门的方法,封装成一个serveFood()方法String food = pay.pay();food = cook.cook(food);waiter.serve(food);}}接下来Customer来调用 。
public class Customer{public void haveDinner(){// 直接依赖于Facade类来实现用餐方法Facade f = new Facade();f.serveFood();}public static void main(String[] args){new Customer().haveDinner();}}
结果。
0 0
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- 门面模式
- C++上机作业-1
- 学生信息管理系统2.0
- 博弈总结
- COLORREF含义及在VC++中的使用
- 本地gradle的一些命令
- 门面模式
- 以Web方向为基础的java学习路线
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列01)--Hello world!
- Manacher 线性时间求最长回文串
- 个人学习目标
- [POJ2104]K-th Number(静态主席树)
- 学生信息管理系统1.0
- ADD SSH KEY TO GITLAB
- BZOJ-3282 Tree Link-Cut-Tree(似乎树链剖分亦可)