Ruby设计模式透析:适配器(Adapter)2014-03-15 csdn博客 guolin今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务!最近ChinaJoy马上就要 开始了,老板要求提供一种直观的方式,可以查看到我们新上线的游戏中每个服的在线人数。”你看了看日期,不是吧!这哪里是马上要开始了,分明是已经开始了!这怎么可能来得及呢?“没关系的。”你的leader安慰你道:“功能其实很简单的,接口都已经提供好了,你只需要 调用一下就行了。”好吧,你勉为其难地接受了,对于这种突如其来的新需求,你早已习惯。你的leader向你具体描述了一下需求,你们的游戏目前有三个服,一服已经开放一段时间了, 二服和三服都是新开的服。设计的接口非常轻便,你只需要调用Utility.online_player_count (Fixnum),传入每个服对应的数值就可以获取到相应服在线玩家的数量了,如一服传入1,二服传入2, 三服则传入3。如果你传入了一个不存在的服,则会返回-1。然后你只要将得到的数据拼装成XML就好, 具体的显示功能由你的leader来完成。好吧,听起来功能并不是很复杂,如果现在就开始动工 好像还来得及,于是你马上敲起了代码。首先定义一个用于统计在线人数的父类PlayerCount, 代码如下:
class PlayerCountdef server_nameraise "You should override this method in subclass."enddef player_countraise "You should override this method in subclass."endend
接着定义三个统计类继承PlayerCount,分别对应了三个不同的服,如下所示:
class ServerOne < PlayerCountdef server_name"一服"enddef player_countUtility.online_player_count(1)endend
class ServerTwo < PlayerCountdef server_name"二服"enddef player_countUtility.online_player_count(2)endend
class ServerThree < PlayerCountdef server_name"三服"enddef player_countUtility.online_player_count(3)endend
然后定义一个XMLBuilder类,用于将各服的数据封装成XML格式,代码如下:
class XMLBuilderdef self.build_xml playerbuilder = ""builder << "<root>"builder << "<server>" << player.server_name << "</server>"builder << "<player_count>" << player.player_count.to_s << "</player_count>"builder << "</root>"endend