- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式-适配器
设计模式之---适配器
适配器模式
先考虑这种设计模式适用场景:
假如我们有一个运行良好的接口以及其实现,(Version 1.0,比如说是按照用户要求开发的日志系统,这个日志系统是基于文件记录的FileLogger),
但是由于系统升级或者用户需求变化等,我们又设计了一个新的接口以及实现(Version 2.0,比如说是按照用户的要求,让日志系统是基于数据库记录的DBLogger),并且这个新设计的接口也能良好运行...
假如到此为止,我们还没看出设计模式的用武之地。然而,我们知道,用户的需求创意是无穷无尽的,现在用户说了,我们想同时用这两种日志系统...
就是说,现如今的业务是运行在Version 2.0 的接口上,但是我要用 Version 1.0的实现...
好,需求出来了,那么怎么实现呢?两个接口的方法都不一致(兼容)?
说起来也简单,大约有这么2套方案:
1,我们按照DBLogger的接口,在重新开发一套,适用于文件系统的日志。
2,直接修改Version 1.0 的代码。
先说第一种方案,这么做确实可以,而且很直观。但是在我们已完成相应功能的前提下,再重新写一套代码其实是没有必要的,并且代码复用性也不高。
从这个角度考虑,如果有更好的办法,我们可以将这个方案pass掉。
再说第二种方案,第二种方案也可以解决问题,但是它暴露的问题更加明显。如果直接修改第一版本的代码,那么很可能造成其他依赖这些代码的
代码不能运行,也就是存在依赖关系的约束。这个方案还不如第一个方案,所以我们毫不犹豫的把它pass!
两种方案都被否定了,下面就是 适配器模式 上场了。
适配器模式作用:将一个接口转化为客户端希望的另一个接口,使得原本由于接口不相容的两个类,可以相互配合的一起工作。
主要就是起一个转换器的作用,目的就是复用原来的功能,说白了就是让两个接口匹配起来。想想看,适配器的作用在生活中很常见,
比如管道转接头,三相插座插口转换器等。
这就是 适配器模式 出现的背景...
下面我们看一下代码的实现:
首先看一下日志模型类(JavaBean):
package mode.adaptor;
/**
* 这是日志对象的模型 简化点写,只有操作人和操作
*
* @author root
*
*/
public class LogModel {
private String uuid;
private String operator;// 操作人
private String operate;// 操作
private String timestamp;// 操作时间
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public String getOperate() {
return operate;
}
public void setOperate(String operate) {
this.operate = operate;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String toString() {
return 用户 + this.getOperator() + 在 + this.getTimestamp()
+ 做了 + this.getOperate() + 操作;
}
}
然后在看一下 Version 1.0的日志系统接口,面向文件的:
package mode.adaptor;
import java.util.List;
/**
* 文件日志系统的操作接口
* @author root
*
*/
public interface FileLogger {
public ListLogModel readLog();
public void writeLog(LogModel model);
}
以及具体实现:
package mode.adapto
您可能关注的文档
最近下载
- 留守儿童学前教育毕业论文.docx VIP
- 热处理炉温均匀性测试标准SAE AMS2750F Rev.F 2020 英文版+中文版.pdf VIP
- 输入11到20带圈字符.doc VIP
- 固体比热容的测量.doc VIP
- 翻车机值班员岗位职责共3篇翻车机操作工岗位职责.docx VIP
- 【新教材】人教版(2024)八年级上册英语Unit 6 Plan for Yourself教案(表格式).docx
- 植筋、界面处理检验批质量验收记录表.doc VIP
- 实用营养与保健知到课后答案智慧树章节测试答案2025年春浙江大学.docx VIP
- 泌尿系结石PPT课件PPT课件.ppt
- 标准图集-20S515-钢筋混凝土及砖砌排水检查井.pdf VIP
原创力文档


文档评论(0)