我的命令工厂(一) —— 泛型
????? 泛型开发已经是java编程中老生常谈的问题了,这里就不一一详细解释泛型的基础了。笔者在几年前也不知道泛型的好处,当时j2me并不支持泛型(如今亦是),直到写编辑器和服务器开发才渐渐接触和爱上java的泛型,虽然比起c++的泛型扔是相形见拙。好了简单的废话开场白结束之后我们开始介绍这个Command Factory.
??????
????? 这里笔者举例的一个工厂是用来处理上下行网络报文包的,暂时只给出下行解析的列子。
?
????? ManageObject类是一个通用对象接口,之后我们所有的Command皆要实现这个规范接口,最终通过我们的构建器来获取相应的Command。
?
package com.gameu.core;import java.util.Iterator;import java.util.Set;/** * 通用池化接口 * @author Tony */public interface Poolable<T extends ManageObject> {/** * 是否包含目标ID * @param id 要查询的ID * @return 是/否 */boolean contains(int id);/** * 池中是否包含目标名称 * @param name 要查询的名称 * @return 是/否 */boolean contains(String name);/** * 池销毁方法 */void destory();/** * 通过目标ID检索关联的池对象 * @param id 目标ID * @return 关联的池对象 */T get(int id);/** * 通过目标名称检索关联的池对象 * @param name 目标名称 * @return 关联的池对象 */T get(String name);/** * 获取池名称 * @return 池名称 */String getName();/** * 池初始化方法 */void initialize();/** * 获取池的对象迭代器 * @return 池对象迭代器 */Iterator<T> iterate();/** * 获取池的的主键集合,用于便历 * @return 主键集合 */Set<Long> keySet();/** * 计算池长度,即池对象个数 * @return 池长度 */int length();/** * 从池中退出目标ID的对象 * @param id 目标ID * @return 目标对象 */T pop(int id);/** * 从池中退出目标名称的对象 * @param name 目标名称 * @return 目标对象 */T pop(String name);/** * 放入一个对象到池中 * @param value 目标对象 * @return 压入后更新的目标对象 */T push(T value);/** * 更新池对象<br> * 根据功能不同,实现也不同:<br> * 如保存池,会根据将对象更新到数据库中.<br> * @param value 目标对象 */T update(T value);}??? Poolable是一个核心池。一切的manageobject都是存在这个核心池中。对于其中的T,各位不懂得看官去看看泛型基础就知道了。
??? 好了,第二章会介绍command的具体实现,之后还会引入Dictionary类来完成字典查询。
?