public interface Payment
{
//模拟顾客支付费用的方法
String pay();
}
public class PaymentImpl
implements Payment
{
//模拟顾客支付费用的方法
public String pay()
{
String food = "快餐";
System.out.println("你已经向收银员支付了费用,您购买的食物是:"
+ food);
return food;
}
}
public interface Waiter
{
//模拟服务员上菜的方法
void serve(String food);
}
public class WaiterImpl
implements Waiter
{
//模拟服务员上菜的方法
public void serve(String food)
{
System.out.println("服务器员已将" + food
+ "端过来了,请慢用...");
}
}
public interface Cook
{
//模拟烹调食物的方法
String cook(String food);
}
public class CookImpl
implements Cook
{
//模拟烹调食物的方法
public String cook(String food)
{
System.out.println("厨师正在烹调:" + food);
return food;
}
}
public class Facade
{
//定义被Facade封装的三个部门,Facade(外观)模式为子系统中的各类(或结构与方法)提供一个简明一致的界面,
//隐藏子系统的复杂性,使子系统更加容易使用。他是为子系统中的一组接口所提供的一个一致的界面。
Payment pay;
Cook cook;
Waiter waiter;
//构造器
public Facade()
{
Payment pay = new PaymentImpl();
Cook cook = new CookImpl();
Waiter waiter = new WaiterImpl();
}
public void serveFood()
{
//依次调用三个部门的方法,封装成一个serveFood()方法
String food = pay.pay();
food = cook.cook(food);
waiter.serve(food);
}
}
public class Customer
{
public void haveDinner()
{
//依次创建三个部门实例
Payment pay = new PaymentImpl();
Cook cook = new CookImpl();
Waiter waiter = new WaiterImpl();
//依次调用三个部门实例的方法来实现用餐功能
String food = pay.pay();
food = cook.cook(food);
waiter.serve(food);
//直接依赖于Facade类来实现用餐方法
Facade f = new Facade();
f.serveFood();
}
public static void main(String[] args)
{
new Customer().haveDinner();
}
}