最近做了个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();
}
}
}
分享到:
相关推荐
通过本实验,我掌握了使用简单工厂模式编写四则运算程序,并能够通过反射技术改写工厂类。实验结果表明,使用工厂模式和反射技术可以实现灵活的对象创建,并且能够提高代码的可维护性和可扩展性。 七、结论 本实验...
【简单工厂模式】是一种常用的创建型设计模式,它提供了一个创建对象的接口,但让子类决定实例化哪一个类。简单工厂模式使代码能够绕过复杂的实例化逻辑,将对象的创建过程封装起来,使客户端代码更加简洁。 在这个...
EJB 调用是工厂模式的实现,使用 EJB 语法来调用 EJB 对象。例如: EJBHome em = JNDIServer.getRemoteHome(EJB-JNDI-NAME); EJBObject myEJB = em.create(); em.create() 类似 Afactory.create(),EJBObject 是...
利用设计模式对java迷宫进行改写,采用了单例、策略、工厂模式
《大数的改写》教学设计.docx
- 当启用了“用Insert控制改写模式”功能后,用户可以通过按压**Insert键**来在**插入模式**与**改写模式**之间切换。 - 如果当前处于**插入模式**,按下Insert键会切换至**改写模式**;反之亦然。 #### 四、小提示...
简单工厂模式C语言实现,改写自http://blog.csdn.net/sx_wpc/article/details/7645062一文的代码。
DAO(Data Access Object)设计模式是Java开发中用于数据库访问的一种常见模式,它在J2EE应用程序中扮演着至关重要的角色。DAO模式的主要目的是将业务逻辑层与数据存储层进行解耦,使得代码更加模块化,易于维护和...
vs2013工程的设计模式,根据《head first设计模式》改写的一个多模式协作的例子。结合着 http://download.csdn.net/detail/ustb_atrx/9434958 一起看比较好。
学生信息管理系统是一个典型的后台应用程序,它使用MVC(Model-View-Controller)设计模式来组织代码,实现对学生信息的高效管理。在这个系统中,我们主要关注三个核心组件:模型(Model)、视图(View)和控制器...
这两种语言都是我不熟悉的故我尝试以我比较熟悉的语言Delphi改写所有范例,不管你所熟悉的语言是甚么建议你以你所熟悉的语言自行撰写程序范例,相信如此可以让你对所使用的语言能更深一步的认识,也可以帮助你了解书...
《大话模式》是一本经典的面向对象设计模式的书籍,其中介绍了多种设计模式,包括Strategy模式。Strategy模式是一种行为设计模式,它使你能在运行时改变对象的行为。在这个模式中,一个类的行为或其算法可以在运行时...
例如,"人们慌乱地向南跑去"可以改写为"人群如惊弓之鸟,慌乱地向南逃窜",使原本简单的陈述句变得更有画面感。 5. **想象写话**: - 这部分是让学生根据情境进行创造性写作,例如,"老汉好像要喊什么",可能是...
单硅CPU芯片或将改写人机交互模式.pdf
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
2. **项目暗箱**:这里的“项目暗箱”可能指的是项目的核心模块或秘密技术,通常包含项目的关键算法、数据结构和设计模式。了解项目暗箱有助于理解项目的运行机制,是进行项目改写或维护的重要基础。可能涉及到的...
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
这两种语言都是我不熟悉的故我尝试以我比较熟悉的语言Delphi改写所有范例,不管你所熟悉的语言是甚么建议你以你所熟悉的语言自行撰写程式范例,相信如此可以让你对所使用的语言能更深一步的认识,也可以帮助你了解书...
4. 减少子查询,尽可能用连接替换子查询,或使用exists和in子句代替not in,因为前者通常效率更高。 三、并行查询 对于大规模数据处理,启用并行查询可以将任务分散到多个处理器上,缩短执行时间。但需注意,过度...
在Oracle中,优化器会根据不同的参数来决定使用何种方式执行SQL语句。这些参数包括统计信息、表和索引的物理特性等。优化过程中,我们可能需要对原始查询语句进行改写,以便优化器生成更优的执行计划。 优化改写的...