【设计模式-门面模式】
时间:2022-07-24
本文章向大家介绍【设计模式-门面模式】,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
学校的学生信息相关系统大家都用过,比如门户网、教务系统、图书管理系统等,一般需要用到某个系统,需要单独去登录,比如同时想去门户网和教务系统查询信息,需要在两个网站都进行登录。此时需要有一个统一用户管理系统,登录了此系统之后,想看其他网站就无需再次登录,这就是门面模式的例子。
门面模式属于结构型模式。类似与在平时给前端提供一个接口,接口里面调用了很多其他的服务。
一、定义
定义了一个高层接口,包含了对各个子系统的引用,客户端可以通过它访问各个子系统的功能。
二、实例
比如去购物网站下单的时候,会涉及到订单服务、支付服务、物流服务。购物网站提供了一个下单接口,在此接口内会调用这三个服务。
商品对象:
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返回视图。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MongoDB权威指南学习笔记(2)--设计应用
- 高性能MySQL学习笔记
- 【Netty之旅四】你一定看得懂的Netty客户端启动源码分析!
- dubbo(二)动态编译compiler
- HttpClient工具类
- java面试知识要点汇总(线程和锁)
- 「二八法则」的数据可视化:用帕累托图进行数据分析
- dubbo(三)服务运行容器Container
- python实现抓取web和xcx数据推送到wx和邮件
- 如何快速识别项目水平?
- 亲测有效 | OpenVINO支持ONNX格式文件直接读取了
- 【自动化测试】【Jest-Selenium】(01)—— Jest 入门
- 设计模式:原型模式
- 后端逆袭,一份不可多得的PHP学习指南
- 走进Java接口测试之工具类库 Hutool