概述
Facade(外观)模式总结
- 前言
- 一、外观模式总结
- 1、模式意图
- 2、参与者
- 3、结构及效果
- 二、外观模式应用示例
- 1、用例背景描述
- 2、用例结构图
- 3、子系统类说明
- 4、外观类说明
- 总结
前言
本周五参加了Facade(外观)模式研讨会,本文的目的是对这个模式的总结和分享,希望对需要学习这个设计模式的同学有所帮助。本文一共分为两个部分,第一个部分是外观模式的基础知识总结;第二个部分是外观模式的一个例子分享。一、外观模式总结
1、模式意图
为子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2、参与者
Facade-- 知道哪些子系统类负责处理请求;
-- 将客户的请求代理给适当的子系统对象。
Subsystem classes
-- 实现子系统的功能;
-- 处理由Façade对象指派的任务;
-- 没有Façade的任何相关信息
3、结构及效果
外观模式结构图: 效果:1、它对客户屏蔽子系统组件,减少客户处理对象的数目,使子系统使用更方便。
2、实现子系统与客户之间松耦合。
3、不限制客户使用子系统类。
二、外观模式应用示例
1、用例背景描述
在can总线中,can数据帧最多能携带8个字节数据,为了能把长消息(消息字符长度超过8个字节)的数据传输到指定节点,定义了一个传输协议:ISO-15765,该协议规定长消息是如何传输的。客户如果想发长消息,首先需要按协议把长消息拆分成短消息,然后按can帧发送出去;为了接收发送消息的响应结果,需要接收消息并组成长消息,返回给客户。这样一个来回,涉及了四个子系统:拆包、发送、接收、组包。其实客户只想发送一个消息,得到返回结果,可以利用外观模式,简化客户代码,外观只提供一个发送接口即可,当接口返回时,返回接收到的消息,客户可以不关心长消息是如何拆包、发送的,也不关心短消息如何组合成长消息(响应)的。外观模式非常适合这种分层协议,层与层之间通过外观做交互,简单方便。2、用例结构图
3、子系统类说明
1、msg_parser_t:负责把长消息(请求)拆分成短消息以及把收到的短消息组合成一个长消息(响应),该类提供以下接口:vector<shor_msg_t*> parser_long_msg(unsigned char* request);
unsigned char* parser_short_msg(vector<short_mst_t*> response);
2、sender_t:负责把短消息以can帧的方式发送到总线,提供发送接口:ret_t send_short_msg(vector<short_mst_t*> request);
3、receiver_t:负责从can总线接收短消息。vector<shor_msg_t*> receive_msg();
4、外观类说明
外观类提供一个发送消息接口:ret_t request(unsigned char* request, unsigned char** response) {
//拆分消息
vector<shor_msg_t*> short_msgs = parser_long_msg(request);
//发送can帧短消息
send_short_msg(short_msgs);
//接收响应
vector<shor_msg_t*> response_short_msgs = receive_msg();
//响应:短消息组成长消息
unsigned char* response_long_msg = parser_short_msg(response_short_msgs );
*response = response_long_msg ;
return RET_OK;
}
总结
通过以上示例,可知,外观模式非常适合简化客户代码,适合分层协议的设计和实现。外观只是提供了一种方便客户使用的接口,可以当然也可以自己直接使用子系统的类来实现相同功能。使用外观接口,客户代码非常简单,但是只能按外观默认的实现方式,比较死板;直接使用子系统的类,比较灵活,就是用起来比较麻烦,适合对子系统非常了解的开发人员使用。最后
以上就是魁梧饼干为你收集整理的Facade(外观)模式总结前言一、外观模式总结二、外观模式应用示例总结的全部内容,希望文章能够帮你解决Facade(外观)模式总结前言一、外观模式总结二、外观模式应用示例总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复