/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public interface Cook
{
    // 模拟烹调食物的方法
    String cook(String food);
}
/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class CookImpl
    implements Cook
{
    // 实现模拟烹调食物的方法
    public String cook(String food)
    {
        System.out.println("厨师正在烹调:" + food);
        return food;
    }
}
/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
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();
    }
}
/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
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);
	}
}

  

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public interface Payment
{
    // 模拟顾客支付费用的方法
    String pay();
}
/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class PaymentImpl
	implements Payment
{
	// 实现模拟顾客支付费用的方法
	public String pay()
	{
		String food = "快餐";
		System.out.println("你已经向收银员支付了费用,您购买的食物是:"
			+ food);
		return food;
	}
}

  

/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public interface Waiter
{
    // 模拟服务生上菜的方法
    void serve(String food);
}
/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class WaiterImpl
    implements Waiter
{
    // 模拟服务生上菜的方法
    public void serve(String food)
    {
        System.out.println("服务生已将" + food
            + "端过来了,请慢用...");
    }
}