今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务!最近ChinaJoy马上就要开始了,老板要求提供一种直观的方式,可以查看到我们新上线的游戏中每个服的在线人数。”
你看了看日期,不是吧!这哪里是马上要开始了,分明是已经开始了!这怎么可能来得及呢?
“没关系的。”你的leader安慰你道:“功能其实很简单的,接口都已经提供好了,你只需要调用一下就行了。”
好吧,你勉为其难地接受了,对于这种突如其来的新需求,你早已习惯。
你的leader向你具体描述了一下需求,你们的游戏目前有三个服,一服已经开放一段时间了,二服和三服都是新开的服。设计的接口非常轻便,你只需要调用Utility.getOnlinePlayerCount(int),传入每个服对应的数值就可以获取到相应服在线玩家的数量了,如一服传入1,二服传入2,三服则传入3。如果你传入了一个不存在的服,则会返回-1。然后你只要将得到的数据拼装成XML就好,具体的显示功能由你的leader来完成。
好吧,听起来功能并不是很复杂,如果现在就开始动工好像还来得及,于是你马上敲起了代码。
首先定义一个用于统计在线人数的接口PlayerCount,代码如下:
-
publicinterfacePlayerCount{
-
-
StringgetServerName();
-
-
intgetPlayerCount();
-
-
}
接着定义三个统计类实现了PlayerCount接口,分别对应了三个不同的服,如下所示:
-
publicclassServerOneimplementsPlayerCount{
-
-
@Override
-
publicStringgetServerName(){
-
return"一服";
-
}
-
-
@Override
-
publicintgetPlayerCount(){
-
returnUtility.getOnlinePlayerCount(1);
-
}
-
-
}
-
publicclassServerTwoimplementsPlayerCount{
-
-
@Override
-
publicStringgetServerName(){
-
return"二服";
-
}
-
-
@Override
-
publicintgetPlayerCount(){
-
returnUtility.getOnlinePlayerCount(2);
-
}
-
-
}
-
publicclassServerThreeimplementsPlayerCount{
-
-
@Override
-
publicStringgetServerName(){
-
return"三服";
-
}
-
-
@Override
-
publicintgetPlayerCount(){
-
returnUtility.getOnlinePlayerCount(3);
-
}
-
-
}
然后定义一个XMLBuilder类,用于将各服的数据封装成XML格式,代码如下:
-
publicclassXMLBuilder{
-
-
publicstaticStringbuildXML(PlayerCountplayer){
-
StringBuilderbuilder=newStringBuilder();
-
builder.append("<root>");
-
builder.append("<server>").append(player.getServerName()).append("</server>");
-
builder.append("<player_count").append(player.getPlayerCount()).append("</player_count>");
-
builder.append("</root>");
-
returnbuilder.toString();
-
}
-
-
}
这样的话,所有代码就完工了,如果你想查看一服在线玩家数只需要调用:
-
XMLBuilder.buildXML(newServerOne());
查看二服在线玩家数只需要调用:
-
XMLBuilder.buildXML(newServerTwo());
查看三服在线玩家数只需要调用:
-
XMLBuilder.buildXML(newServerThree());
咦?你发现查看一服在线玩家数的时候,返回值永远是-1,查看二服和三服都很正常。
你只好把你的leader叫了过来:“我感觉我写的代码没有问题,但是查询一服在线玩家数总是返回-1,为什么会这样呢?”
“哎呀!”你的leader猛然想起,“这是我的问题,前面没跟你解释清楚。由于我们的一服已经开放一段时间了,查询在线玩家数量的功能早就有了,使用的是ServerFirst这个类。当时写Utility.getOnlinePlayerCount()这个方法主要是为了针对新开的二服和三服,就没把一服的查询功能再重复做一遍。”
听到你的leader这么说,你顿时松了一口气:“那你修改一下Utility.getOnlinePlayerCount()就好了,应该没我什么事了吧?”
“晤。。。本来应该是这样的。。。可是,Utility和ServerFirst这两个类都已经被打到Jar包里了,没法修改啊。。。”你的leader有些为难。
“什么?这不是坑爹吗,难道要我把接口给改了?”你已经泪流满面了。
“这倒不用,这种情况下可以使用适配器模式,这个模式就是为了解决接口之间不兼容的问题而出现的。”
其实适配器模式的使用非常简单,核心思想就是只要能让两个互不兼容的接口能正常对接就行了。上面的代码中,XMLBuilder中使用PlayerCount这个接口来拼装XML,而ServerFirst并没有实现PlayerCount这个接口,这个时候就需要一个适配器类来为XMLBuilder和ServerFirst之间搭起一座桥梁,毫无疑问,ServerOne就将充当适配器类的角色。修改ServerOne的代码,如下所示:
-
publicclassServerOneimplementsPlayerCount{
-
-
privateServerFirstmServerFirst;
-
-
publicServerOne(){
-
mServerFirst=newServerFirst();
-
}
-
-
@Override
-
publicStringgetServerName(){
-
return"一服";
-
}
-
-
@Override
-
publicintgetPlayerCount(){
-
returnmServerFirst.getOnlinePlayerCount();
-
}
-
-
}
这样通过ServerOne的适配,XMLBuilder和ServerFirst之间就成功完成对接了!使用的时候我们甚至无需知道有ServerFirst这个类,只需要正常创建ServerOne的实例就行了。
需要值得注意的一点是,适配器模式不并是那种会让架构变得更合理的模式,更多的时候它只是充当救火队员的角色,帮助解决由于前期架构设计不合理导致的接口不匹配的问题。更好的做法是在设计的时候就尽量把以后可能出现的情况多考虑一些,在这个问题上不要向你的leader学习。
适配器:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
分享到:
相关推荐
(新高考适用)4 任务群四 古典诗歌鉴赏4 微视角 高考诗歌鉴赏典型题型归类透析 课件——2021届高考语文冲刺复习.ppt
Java深入解析 透析Java本质的36个话题
资源名称:Java深入解析 透析Java本质的36个话题内容简介:本书分为5 章,分别为“基本概念”,“运算符与表达式”,“String 类”,“方法、构造器与变量”,“类与接口”。通过以上方面介绍那些常见、常用却少为人...
设计模式只是为Java架构师准备的——至少您可能一直这样认为。实际上,设计模式对于每个人都非常有用。如果这些工具不是 “架构太空人” 的专利,那么它们又是什么?为什么说它们在PHP应用程序中非常有用?本文解释...
银行互联网贷款发展透析——以青岛地区为例.pdf
阿里P7大牛实战演练到源码透析——分布式环境session丢失爬坑记需要更多往期录播资料可以联系我
自己花钱买的高清、完整版、带书签。本书分为5 章,分别为“基本概念”,“运算符与表达式”,“String类”,“方法、构造器与变量”,“类与...通过以上方面介绍那些常见、常用却少为人知的Java 知识。值得你一阅。
深入讲解WINDOWS网络编程中的“乾坤大挪移”——原始套接字的原理及用法。内中更有示例代码,教你实现ARP欺骗,洪水攻击,服务拒绝攻击等网络安全软件,还有相应的防范手段。绝对的好书,隆重推荐!
2016届语法专题透析(二)非谓语动词——动词不定式课件——《金太阳考案》.pptx
私募基金运作模式透析
私募基金运作模式透析.pdf
一次学习终身受用-如何正确使用设计模式写出优雅的代码 年薪60万大咖深入浅出带你玩转大型互联网企业DevOps利器-Docker 架构知识透析:深入了解高并发通信模型NIO 除了上面还有Java面试集棉电子书,对于初学者和面试...
私募基金运作模式透析实用.pdf
高校教材管理新模式透析.doc
自营渠道模式透析及其成本控制.doc
应用架构之魂设计模式实战演练应用架构之魂设计模式实战演练 揭开springAOP神秘面纱(动态代理) Mysql性能优化之索引优化 写实现Tomcat服务器 移动后台端框架设计 公司级框架原理解析 解密公司内部框架开发(打造属于...
创造信息时代的大学科研文化——杜德斯达特科研方式变革观透析.pdf
浙江温、台州地区民营经济模式透析的参考论文,工商管理类的优秀论文
财政发展论文:财政视野下体育馆发展模式透析.doc
2016届语法专题透析(一)时态和语态课件——《金太阳考案》.pptx