设计模式之门面模式
学校的学生信息相关系统大家都用过,比如门户网、教务系统、图书管理系统等,一般需要用到某个系统,需要单独去登录,比如同时想去门户网和教务系统查询信息,需要在两个网站都进行登录。此时需要有一个统一用户管理系统,登录了此系统之后,想看其他网站就无需再次登录,这就是门面模式的例子。
门面模式属于结构型模式。类似与在平时给前端提供一个接口,接口里面调用了很多其他的服务。
一、定义
定义了一个高层接口,包含了对各个子系统的引用,客户端可以通过它访问各个子系统的功能。
二、实例
比如去购物网站下单的时候,会涉及到订单服务、支付服务、物流服务。购物网站提供了一个下单接口,在此接口内会调用这三个服务。
商品对象:
public class Produce {
private String name;
public Produce(String name) {
this.name = name;
}
//省略get/set
}
订单服务:
public class OrderService {
public boolean submitOrder(Produce produce){
System.out.println("提交购买:"+produce.getName()+"的订单信息");
return true;
}
}
支付服务:
public class PayService {
public boolean payOrder(Produce produce){
System.out.println("支付购买:"+produce.getName());
return true;
}
}
物流服务:
public class LogisticsService {
public String getLogisticsNo(){
String orderNO = UUID.randomUUID().toString();
System.out.println("调用订单服务,获取订单号:"+orderNO);
return orderNO;
}
}
购物商城:提供了一个统一接口去访问这些服务
public class Mall{
private OrderService orderService = new OrderService();
private PayService payService = new PayService();
private LogisticsService logisticsService = new LogisticsService();
1、提供了一个统一接口
public void buyProduce(Produce produce){
orderService.submitOrder(produce);
payService.payOrder(produce);
logisticsService.getLogisticsNo();
}
}
测试类(客户端):
public static void main(String[] args) {
Produce produce = new Produce("机械键盘");
Mall mall = new Mall();
mall.buyProduce(produce);
}
结果:
类图:
三、源码实例
SpringMVC从页面发起请求到后台处理的过程。最重要的就是DispatchServlet的doDispatch方法。
先从HandlerMapping获取对应的Handler,然后获取HandlerAdapter,最终处理得到ModerAndView返回视图。
=======================================================
我是Liusy,一个喜欢健身的程序员。
欢迎关注微信公众号【Liusy01】,一起交流Java技术及健身,获取更多干货,领取Java进阶干货,一起成为Java大神。
来都来了,关注一波再溜呗。