门面模式

来源:互联网 发布: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
原创粉丝点击