最近做了个android 手机上的ftp服务器,由于ftp服务器要通过接收到的命令来做相应的处理,对于每一个ftp命令,我都要写一个相关的处理类。这样的话,当一个命令传过来之后,怎么实例化相应的命令类呢,最简单的方法就是用一个简单工厂设计模式了。不过这么多命令,我可不想对30命令用if else来处理,这样实在是太麻烦了。最后发现可以用java反射来做比较好。
public abstract class CommandManager implements Runnable {
protected static CommandMap[] cmdClasses = {
new CommandMap("USER", CommandUSER.class),
new CommandMap("PASS", CommandPASS.class),
new CommandMap("OPTS", CommandOPTS.class),
new CommandMap("PWD", CommandPWD.class),
new CommandMap("TYPE", CommandTYPE.class),
new CommandMap("SYST", CommandSYST.class),
new CommandMap("NOOP", CommandNOOP.class),
new CommandMap("CWD", CommandCWD.class),
new CommandMap("PORT", CommandPORT.class),
new CommandMap("PASV", CommandPASV.class),
new CommandMap("SIZE", CommandSIZE.class),
new CommandMap("LIST", CommandLIST.class),
new CommandMap("RETR", CommandRETR.class),
new CommandMap("NLST", CommandNLST.class),
new CommandMap("QUIT", CommandQUIT.class),
new CommandMap("NLST", CommandNLST.class),
new CommandMap("RMD", CommandRMD.class),
new CommandMap("STOR", CommandSTOR.class),
new CommandMap("DELE", CommandDELE.class),
new CommandMap("RNFR", CommandRNFR.class),
new CommandMap("XMKD", CommandMKD.class),
new CommandMap("RNTO", CommandRNTO.class),
new CommandMap("MKD", CommandMKD.class),
new CommandMap("FEAT", CommandFEAT.class),
new CommandMap("CDUP", CommandCDUP.class),
new CommandMap("XPWD", CommandPWD.class),
new CommandMap("APPE", CommandAPPE.class),
new CommandMap("XCUP", CommandCDUP.class),
new CommandMap("XRMD", CommandRMD.class) };
protected static void CreatCommand(String command,String para) {
CopyOfCommandManager cmdInstance = null;
for (int i = 0; i < cmdClasses.length; i++) {
if (cmdClasses[i].getName().equals(command)) {
Constructor<? extends CopyOfCommandManager> constructor;
try {
constructor = cmdClasses[i].getClass().getConstructor(
new Class[] { String.class });
} catch (NoSuchMethodException e) {
return;
}
try {
cmdInstance = constructor.newInstance(new Object[] {
para });
} catch (Exception e) {
return;
}
}
}
if (cmdInstance != null) {
cmdInstance.run();
}
}
}
分享到:
相关推荐
请用Java面向对象语言,利用简单工厂模式,实现简易计算器程序(加减乘除功能)。 在注释中回答以下问题: 1、 软件设计目标分别是什么? 2、 在相应的代码处解释设计目标实现的方式。
工厂方法模式的C语言实现。改写自http://blog.csdn.net/sx_wpc/article/details/7645062一文的代码。
利用设计模式对java迷宫进行改写,采用了单例、策略、工厂模式
简单工厂模式的C语言实现。改写自http://blog.csdn.net/sx_wpc/article/details/7645062一文的代码。
《大数的改写》教学设计.docx
简单工厂模式C语言实现,改写自http://blog.csdn.net/sx_wpc/article/details/7645062一文的代码。
简单工厂模式的C语言实现。改写http://blog.csdn.net/sx_wpc/article/details/7645062一文的代码。
使用C++改写大话模式中的Stategy模式
vs2013工程的设计模式,根据《head first设计模式》改写的一个多模式协作的例子。结合着 http://download.csdn.net/detail/ustb_atrx/9434958 一起看比较好。
Java设计模式学期 1、严格按照提供的模板进行改写 2、若有需要粘贴的文字,可先将它们粘贴至记事本中,然后再粘贴到正文中,注意不能破坏格式(要擅于使用格式刷) 3、模型图、代码和文字配合进行模式的说明 4、结合...
J2EE之DAO设计模式
MVC设计模式,实现学生信息管理(增删改查)使用MYSQL、C3P0、DBUtils
这两种语言都是我不熟悉的故我尝试以我比较熟悉的语言Delphi改写所有范例,不管你所熟悉的语言是甚么建议你以你所熟悉的语言自行撰写程序范例,相信如此可以让你对所使用的语言能更深一步的认识,也可以帮助你了解书...
单硅CPU芯片或将改写人机交互模式.pdf
洪水狂奔而来.改写成拟人句.docx
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
这两种语言都是我不熟悉的故我尝试以我比较熟悉的语言Delphi改写所有范例,不管你所熟悉的语言是甚么建议你以你所熟悉的语言自行撰写程式范例,相信如此可以让你对所使用的语言能更深一步的认识,也可以帮助你了解书...
改写了proxool,让他支持spring注入 当用spring注入时间的时候,跑起来spring会报错。 是因为里面类似不一致的问题。改写之后,跑起来不会有问题
在Word2021中使用Insert键控制改写模式.docx