`
xiduxiaoyu
  • 浏览: 159417 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

我的命令工厂(一) —— 泛型

阅读更多

      泛型开发已经是java编程中老生常谈的问题了,这里就不一一详细解释泛型的基础了。笔者在几年前也不知道泛型的好处,当时j2me并不支持泛型(如今亦是),直到写编辑器和服务器开发才渐渐接触和爱上java的泛型,虽然比起c++的泛型扔是相形见拙。好了简单的废话开场白结束之后我们开始介绍这个Command Factory.

      
      这里笔者举例的一个工厂是用来处理上下行网络报文包的,暂时只给出下行解析的列子。

 

      ManageObject类是一个通用对象接口,之后我们所有的Command皆要实现这个规范接口,最终通过我们的构建器来获取相应的Command。

 

package com.gameu.core;

/**
 * 通用对象接口
 * @author Tony
 *
 */
public interface ManageObject {
	/**
	 * 获取对象创建时间戳
	 * @return 对象创建时间戳
	 */
	long getCreateTime();

	/**
	 * 获取对象编号
	 * @return 对象统一编号
	 */
	int getID();


	/**
	 * 获取对象名称
	 * @return 对象名称
	 */
	String getName();

	/**
	 * 对象初始化
	 */
	void initialize();

	/**
	 * 设置对象编号
	 * @param ID 对象统一编号
	 */
	void setID(int ID);

	/**
	 * 设置对象名称
	 * @param name 对象名称
	 */
	void setName(String name);
	
	/**
	 * 获取对象上次更新时间戳
	 * @return 上次更新时间戳
	 */
	long getLastUpdateTime();

}

    从上面代码中 我们不难看出 这就是一个普通得不能再普通的一个通用接口。里面有一些常用方法。之后我们要用我们的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类来完成字典查询。

 

分享到:
评论

相关推荐

    asp.net知识库

    泛型技巧系列:用泛型打造可复用的抽象工厂 体验.net2.0的优雅(四):Provider、策略、控制反转和依赖注入 泛型最佳实践 asp.net 2.0下嵌套masterpage页的可视化编辑 C# 2.0与泛型 动态调用对象的属性和方法——...

    Java典型模块

    3.6.3 编写一个自己的加载器 3.7 动态代理 3.7.1 什么是代理 3.7.2 动态代理基础类 3.7.3 InvocationHandler接口 3.7.4 动态代理类的设计模式 3.8 小结 第2篇 线程开发 第4章 学生并发接水(线程Thread) 4.1 学生...

    javaSE代码实例

    第10章 构造器——对象制造的工厂 176 10.1 基础知识 176 10.1.1 编写构造器的语法规则 176 10.1.2 访问限制修饰符与构造器 176 10.1.3 构造器与返回类型 179 10.2 创建对象 180 10.3 重载构造器 181 ...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    cs_basic_concept

    程序语言:hash 表原理java 对象的堆栈模型java jvm 死锁研究java 不同 list 的对比java gc 回收研究java 不同Map 的对比java 设计模式之工厂模式java 概念之泛型java 和 python 的对象模型对比java 的线程安全java ...

    JAVA上百实例源码以及开源项目

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    JAVA上百实例源码以及开源项目源代码

    数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    UMPAY——编码规范 日志规范 异常规范 网络 协议 TCP/IP HTTP hession file HTTPS 负载均衡 容器 JBOSS tomcat resin jetty 容灾 日志框架 开源框架 slf4j 框架实现 log4j logback commong ...

    编程新手真言......

    ———— A Programming Introduction For Beginners By Minlearn @ http://www.actyou.com.cn/ 设计才是真正的编程! 对类型的设计才是设计! 面向对象并非一切? 无论你以为上述观点是惊天大秘或不过尔尔,你...

Global site tag (gtag.js) - Google Analytics