Java设计模式透析:适配器(Adapter)

今天一大早,你的leader就匆匆忙忙跑过来找到你:“快,快,紧急任务!最近ChinaJoy马上就 要开始了,老板要求提供一种直观的方式,可以查看到我们新上线的游戏中每个服的在线人数。”

你看了看日期,不是吧!这哪里是马上要开始了,分明是已经开始了!这怎么可能来得及呢 ?

“没关系的。”你的leader安慰你道:“功能其实很简单的,接口都已经提供好了,你只 需要调用一下就行了。”

好吧,你勉为其难地接受了,对于这种突如其来的新需求,你早已 习惯。

你的leader向你具体描述了一下需求,你们的游戏目前有三个服,一服已经开放一段 时间了,二服和三服都是新开的服。设计的接口非常轻便,你只需要调用 Utility.getOnlinePlayerCount(int),传入每个服对应的数值就可以获取到相应服在线玩家的数量 了,如一服传入1,二服传入2,三服则传入3。如果你传入了一个不存在的服,则会返回-1。然后你 只要将得到的数据拼装成XML就好,具体的显示功能由你的leader来完成。

好吧,听起来功能 并不是很复杂,如果现在就开始动工好像还来得及,于是你马上敲起了代码。

首先定义一个 用于统计在线人数的接口PlayerCount,代码如下:

public interface PlayerCount {  

    String getServerName();  

    int getPlayerCount();  

}

接着定义三个统计类实现了PlayerCount接口,分别对应了三个不同的服,如下所示:

public class ServerOne implements PlayerCount {  

    @Override
    public String getServerName() {
        return "一服";
    }  

    @Override
    public int getPlayerCount() {
        return Utility.getOnlinePlayerCount(1);
    }  

}
public class ServerTwo implements PlayerCount {  

    @Override
    public String getServerName() {
        return "二服";
    }  

    @Override
    public int getPlayerCount() {
        return Utility.getOnlinePlayerCount(2);
    }  

}
public class ServerThree implements PlayerCount {  

    @Override
    public String getServerName() {
        return "三服";
    }  

    @Override
    public int getPlayerCount() {
        return Utility.getOnlinePlayerCount(3);
    }  

}

然后定义一个XMLBuilder类,用于将各服的数据封装成XML格式,代码如下:

public class XMLBuilder {  

    public static String buildXML(PlayerCount player) {
        StringBuilder builder = new StringBuilder();
        builder.append("<root>");
        builder.append("<server>").append(player.getServerName()).append("</server>");
        builder.append("<player_count").append(player.getPlayerCount()).append("</player_count>");
        builder.append("</root>");
        return builder.toString();
    }  

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 接口
, return
, append
, override
public
,以便于您获取更多的相关知识。

时间: 2024-10-26 18:54:07

Java设计模式透析:适配器(Adapter)的相关文章

Java设计模式透析:组合(Composite)

听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有图书商城,用户 可以在其中随意选购自己喜欢的书籍.你们公司也是对此项目高度重视,加大了投入力度,决定给此 应用再增加点功能. 好吧,你也知道你是逃不过此劫了,没过多久你的leader就找到了你. 他告诉你目前的应用对每本书的浏览量和销售量做了统计,但现在想增加对每个书籍分类的浏览量和 销售量以及所有书籍总的浏览量和销售量做统计的功能,希望你可以来完成这项功能. 领导 安排的工作当然是推脱不掉的,你只能硬着头皮上了,不过好在这个

Java设计模式透析:模板方法(Template Method)

今天你还是像往常一样来上班,一如既往地开始了你的编程工作. 项目经理告诉你,今天 想在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以 XML格式进行包装,这样以后可以方便与客户端进行交互.并且在包装开始前和结束后要打印日志, 这样方便调试和问题定位. 没问题!你觉得这个功能简直是小菜一碟,非常自信地开始写起 代码. Book对象代码如下: public class Book { private String bookName; private int

Java设计模式透析:单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助 你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至 像findbugs等代码检查工具还会认为使用System.out.println()是一个bug. 为什么作为Java 新手神器的System.out.println(),到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会 发现它的很多弊端.比如不可控制,所有的日志都会在项目上线后照常打印,从

Java设计模式透析:策略(Strategy)

今天你的leader兴致冲冲地找到你,希望你可以帮他一个小忙,他现在急着要去开会.要帮什么 忙呢?你很好奇. 他对你说,当前你们项目的数据库中有一张用户信息表,里面存放了很用 户的数据,现在需要完成一个选择性查询用户信息的功能.他说会传递给你一个包含许多用户名的数 组,你需要根据这些用户名把他们相应的数据都给查出来. 这个功能很简单的嘛,你爽快地 答应了.由于你们项目使用的是MySQL数据库,你很快地写出了如下代码: public class QueryUtil { public void fi

Ruby设计模式透析:适配器(Adapter)

今天一大早,你的leader就匆匆忙忙跑过来找到你:"快,快,紧急任务!最近ChinaJoy马上就要 开始了,老板要求提供一种直观的方式,可以查看到我们新上线的游戏中每个服的在线人数." 你看了看日期,不是吧!这哪里是马上要开始了,分明是已经开始了!这怎么可能来得及呢? "没关系的."你的leader安慰你道:"功能其实很简单的,接口都已经提供好了,你只需要 调用一下就行了." 好吧,你勉为其难地接受了,对于这种突如其来的新需求,你早已习惯. 你

Java设计模式之适配器模式(Adapter模式)介绍_java

适配器模式定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用适配器模式 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口. 怎么办? 使用Adapter,在这两种接口之间创建一个混合接口(混血儿). 如何使用适配器模式 实现Adapter方式,其实"think in Java"的"类再生&quo

Ruby设计模式透析:模板方法(Template Method)

今天你还是像往常一样来上班,一如既往地开始了你的编程工作. 项目经理告诉你,今天想 在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以XML 格式进行包装,这样以后可以方便与客户端进行交互.并且在包装开始前和结束后要打印日志,这样方 便调试和问题定位. 没问题!你觉得这个功能简直是小菜一碟,非常自信地开始写起代码. Book对象代码如下: class Book attr_accessor :book_name, :pages, :price, :aut

Ruby设计模式透析:单例(Singleton)

写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你 分析数据,但是Ruby原生带有的puts方法却很少在真正的项目开发中使用. 为什么作为Ruby新 手神器的puts,到了真正项目开发当中会被唾弃呢?其实只要细细分析,你就会发现它的很多弊端.比 如不可控制,所有的日志都会在项目上线后照常打印,从而降低运行效率:又或者不能将日志记录到本 地文件,一旦打印被清除,日志将再也找不回来:再或者打印的内容没有Tag区分,你将很难辨别这一 行日志是在哪个类里打印的. 你的

Ruby设计模式透析:组合(Composite)

听说你们公司最近新推出了一款电子书阅读应用,市场反应很不错,应用里还有图书商城,用户可 以在其中随意选购自己喜欢的书籍.你们公司也是对此项目高度重视,加大了投入力度,决定给此应用 再增加点功能. 好吧,你也知道你是逃不过此劫了,没过多久你的leader就找到了你.他告诉 你目前的应用对每本书的浏览量和销售量做了统计,但现在想增加对每个书籍分类的浏览量和销售量以 及所有书籍总的浏览量和销售量做统计的功能,希望你可以来完成这项功能. 领导安排的工作 当然是推脱不掉的,你只能硬着头皮上了,不过好在这个