学习笔记-轻量级Java EE:模式--门面模式

8 篇文章 0 订阅

随着系统不断的改进和开发,越来越复杂,编写了大量的类,从而是的运用起来复杂化;而门面模式可以为一些类提供一个简化的接口,从而简化这些类的复杂性;

例如你要完成一个动作,却需要多个类协同完成才能完成一个动作,如果不封装到一个方法里,每次都需要调用这依次调用这些类相关的方法,会有什么样的情况呢?

例子:

假如一个顾客去某餐馆就餐,可能需要参观的三个部门协同才能才能完成:收银部、厨师部、服务生部

先定义这三个部门的接口:

public interface Waiter
{
	//模拟服务员上菜的方法
	void serve(String food);
}
public interface Cook
{
	//模拟烹调食物的方法
	String cook(String food);
}
public interface Payment
{
	//模拟顾客支付费用的方法
	String pay();
}
提供各个部门的实现类:

public class WaiterImpl
	implements Waiter
{
	//模拟服务员上菜的方法
	public void serve(String food)
	{
		System.out.println("服务器员已将" + food
			+ "端过来了,请慢用...");
	}
}
public class CookImpl
	implements Cook
{
	//模拟烹调食物的方法
	public String cook(String food)
	{
		System.out.println("厨师正在烹调:" + food);
		return food;
	}
}
public class PaymentImpl
	implements Payment
{
	//模拟顾客支付费用的方法
	public String pay()
	{
		String food = "快餐";
		System.out.println("你已经向收银员支付了费用,您购买的食物是:"
			+ food);
		return 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);
	}
	public static void main(String[] args)
	{
		new Customer().haveDinner();
	}
}
此时仅在客户端代码中直接使用三个部门的执行方法,但如果还需要更多的部门协同合作呢,或者在其他地方要再次使用呢?

在此我们可以考虑再提供一个门面类:

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);
	}
}
在此修改客户类:

public class Customer
{
	public void haveDinner()
	{
		//直接依赖于Facade类来实现用餐方法
		Facade f = new Facade();
		f.serveFood();
	}
	public static void main(String[] args)
	{
		new Customer().haveDinner();
	}
}
下面有俩个例图的对比

通过俩个图的对比,很明显,采用了门面模式的程序结构要更加清晰,减少了客户端代码的编程;

在java EE中使用业务逻辑组件来封装DAO组件是一个典型的门面模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值