04 2007 档案
摘要:ExtremeProgramming(极限编程,简称XP)是由KentBeck在1996年提出的。KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法,希望能使软件开发更加简单而有效。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能行以及面临的困难。1996年三月,Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念——XP。XP是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简
阅读全文
摘要:JDBC码是Java译码的一个部分,它给已写的编码带来了数量惊人的重复。另外,JDBC码几乎会经常性的带来一些低级错误。写出好的JDBC编码并不难,但是很痛苦。DbUtils组件是一个精密而简单的组件,它并不做什么复杂的事而仅仅只是使很多的JDBC任务对开发者来说变得稍容易一点。尽管这时候很多持久框架和包都可以用来使数据持久变得更容易,然而JDBC仍然是大多数Java和Java2企业版(J2EE)开发者赖以生存的工具。因此,任何能让使用JDBC工作更容易的东西都是好消息。DbUtils可以免费下载,它不依赖于任何其它的通用组件而只是依赖下面这些: Java Development Kit...
阅读全文
摘要:1importjava.awt.image.BufferedImage;2importjava.io.File;3importjava.io.IOException;4importjavax.imageio.ImageIO;56publicclassImageIOTest{7publicstaticvoidmain(Stringargs[])throwsIOException{8FileinputFile=newFile("c://test.bmp");9BufferedImageinput=ImageIO.read(inputFile);101112FileoutputF
阅读全文
摘要:我们经常使用COMMONS-BEANUTILS包来进行bean的操作,例如从map到bean获从bean到map的映射,那么实现的原理是什么呢,下面举个简单的操作的例子;首先,我建立一个beanpublic class Bean {private String test1;private String getTest1() {return test1;}private void setTest1(String test1) {this.test1 = test1;}}上面这个例子比较极端,利用我们平常的JAVA操作是不可能通过这两个私有方法进行设置和获取值的,但是我们利用JAVA反射机制却可以
阅读全文
摘要:在遥远的过去,有这么一个与世无争的小村子,村里有一个村长(A)和很多的村民(Bs). 围绕着这个小村子,发生了无数的可歌可泣的故事.当然,和其他的故事一样,村子之外有一个可恶的皇帝(E). 1) 皇帝要让所有的村民交租子,他要经历下面的流程: a) 他首先跑到村民b1那里收租子,村民b1的家里只有门,他就从门进入。 b) 他又跑到村民b2那里收租子,村民b2家里只有窗,没有门,他就从窗进入。 c) 村民b3家里门也没有,窗也没有,皇帝只好采用直升飞机空降的方式进入。 d) 。。。。 终于有一天,皇帝再也受不了了,他把村长叫过来,对他说:以后我收租子,只找你一个,从门进入,我收谁的你就跑腿。从.
阅读全文
摘要:为了加强对这五种创建模式的理解,我就拿电脑生产做为例子。 一个电脑包含很多组件:CPU, Disk, Monitor, keyBoard, Mouse。当然,首先我们有5种Factory: CPUFactory, DiskFactory, MonitorFactory, KeyBoardFactory, MouseFactory。这里采用的就是Factory模式,例如CPUFactory可以有Intel, AMD等等,DiskFactory可以有Maxto, Seaga等。这几个都是电脑组件的程产厂商,对于一个电脑的组成厂商,它需要声称这几个Factory的实例,以便于每次需要一个组建的时候就
阅读全文
摘要:1:工厂(Factory Method)首先,工厂这个名字取得很好,就像前面说的,创建型模式的意义在于把生成一个变量从手工作坊(new,delete)的方式变化到工业化的模式,那么这里的工业化模式最典型的就是工厂(Factory Method)。工厂自己也是一个类,也会生成实例,工厂的功能就是为了创建另外一些变量。举例子,我们有奔驰车,宝马车,马拉车等等。现在我们要为他们生成变量,手工作坊和工业化的区别如下:1) 手工作坊 MyCar = new 奔驰。 显然,如果有一天,你需要了一个新的车,叫宝马, 就需要把程序里面所有的MyCar = new 奔驰换成 MyCar = new 宝马。这样.
阅读全文
摘要:如果说 Factory和Prototype是同一个层次的话,那么Abstract Factory和Builder就是更高一级的层次。1 Abstact Factory 在上面的Factory类型中,我们发现如果种类变了,我们还是要修改我们的代码: Factory = new 宝马工厂。 这样的代码可能出现在很多的地方,改起来并不是很方面。那么怎么办呢? 我们能不能把修改集中在一个地方?答案是可以的,那就是Abstract Factory。我们专门生成一个类来管理工厂,把 Factory = new 宝马工厂 这句话放到他的入口里面。class AbstractFactory{protected
阅读全文
摘要:Bridge桥接模式是一种结构型模式,它主要应对的是:由于类型的固有罗辑,使得类型具有两个或两个以上的纬度变化。也就是要求抽象不应依赖于实现细节,实现细节应依赖于抽象。 《设计模式》中说到将抽象部分与实现部分分离,使他们可以独立的变化。 举个例子更清楚些,好像我们平时玩的游戏中有PS版的,但是不是大家都有PS。这时我们等一段时间,一般会出PC版的或其他版本。由于支持游戏的平台不一样,但是如果我们编写的游戏程序为了适应另一种平台就要全部重新编写的话岂不是很麻烦。再加上游戏本身的变动,一句众人皆知的话:“死定了”。 现在我们来看看Bridge桥接模式,看看它是如何解决类似问题的,首先我们看看Bri
阅读全文
摘要:tomcat 的根目錄下有幾個文件夾,他們的作用如下:bin目錄 存放启动和关闭tomcat脚本 conf 目錄 包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xmlwork 目錄 存放jsp编译后产生的class文件 webapp目錄 存放应用程序示例,以后你要部署的应用程序也要放到此目录 logs 目錄 存放日志文件 lib/japser/common : 这三个目录主要存放tomcat所需的jar文件配置web應用主要是應用server.xml文件,下面是部分元素和它的屬性的含義:server: port 指定一个端口,这个端口负责监听关闭tomcat的
阅读全文
摘要:Java最初是以Applet等客户端图形处理为技术起点的,而本节讨论的是如何在Servlet/JSP中实现图形处理。在Jive中,图片可以用来显示用户的头像,用户在上传自己头像图片时,该图片的大小可能不一,但是由于版面原因,显示的头像图片又有大小限制,那么就需要在用户上传图片时对图片大小做一个检查。如果超过规定大小,就进行一定的缩放处理。缩放处理有两种方式:是在HTML显示时,使用image 语法的width和height来限制大小,但是这样做只是解决了表面问题,无法解决大字节图片传送到客户端带来的性能影响,这个图片因为是用户发言的头 像,将会在每个帖子里面显示。如果头像都是巨大图片,对帖子显
阅读全文
摘要:设计模式之Facade(外观 总管 Manager)板桥里人 http://www.jdon.com 2002/4/6/(转载请保留)模式实战书籍《Java实用系统开发指南》Facade模式的定义: 为子系统中的一组接口提供一个一致的界面.Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: public class DBCompare { Connection conn = null; PreparedStatement prep = null; ResultSet rse...
阅读全文
摘要:做Hibernate应用的开发,肯定会设计到pojo的映射文件的编写,当设计到大量的pojo时,维护映射文件变成了一件相当困难的事情,因为要保持pojo和映射文件的同步,很可能就会出错. 如果采用xdoclet那么就可以很方便的保持它们之间的同步,进一步提高工作效率. 这里举一个简单的使用xdoclet生成映射文件的例子: 首先需要使用的包:1.xdoclet-1.2.3.jar /xjavadoc.jar /xdoclet-hibernate-module-1.2.3.jar 2.ant相关的包首先,建立ant配置文件(一旦建立,之后就可以在项目中不用更改了)<?xmlversion=
阅读全文
摘要:二叉树Binary Tree二叉树的定义二叉树是一类非常重要的树形结构,它可以递归地定义如下:二叉树T是有限个结点的集合,它或者是空集,或者由一个根结点u以及分别称为左子树和右子树的两棵互不相交的二叉树u(1)和u(2)组成。若用n,n1和n2分别表示T,u(1)和u(2)的结点数,则有n=1+n1+n2 。u(1)和u(2)有时分别称为T的第一和第二子树。因此,二叉树的根可以有空的左子树或空的右子树,或者左、右子树均为空。二叉树有5种基本形态,如图1所示。图1 二叉树的5种基本形态(其中□表示空)在二叉树中,每个结点至多有两个儿子,并且有左、右之分。因此任一结点的儿子不外4种情况:没有儿子;
阅读全文
摘要:有关动态bean的一些用法,涉及到的类如下: 1、DynaBean是一个接口,它的实现类有BasicDynaBean、LazyDynaBean、ResultSetIterator、WrapDyna­Bean 2、DynaClass,也是接口,它的实现类有BasicDynaClass、WrapDynaClass等 3、DynaProperty,用来设置动态bean的属性 4、PropertyUtils,工具类,主要用来设置、取得属性值 等等,可以查阅commons-beanutils.jar 这里列举一个例子,讲述它的用法,代码如下: ①动态设置了三个属性id、name、emai
阅读全文
摘要:commons-lang包中对我们有用的类主要有:1.StringUtils 该类主要提供对字符串的操作,对null是安全的,主要提供了字符串查找,替换,分割,去空白,去掉非法字符等等操作2.ObjectUtils 主要是对null进行安全处理,可以设置为null时的默认返回值,比较相等时是调用对象的equals方法,因此需要对对象进行方法进行覆盖3.SystemUtils 主要获取一些系统属性,例如工作目录等等4.DateUtils/CalendarUtils 主要提供了对日期的操作,包括日期加减,日期格式化,日期比较,一定时间范围内日期的迭代等等5.StopWatch 提供秒表的计时,暂停
阅读全文
摘要:这里截获POST或GET请求提交的所有请求参数,并组成查询串返回/***//****该方法用于将request中参数取出组成查询串后返回**@paramrequest*HttpServletRequest*@returnString返回key1=value1&key2=value形式的查询串*/publicstaticStringgetQueryString(HttpServletRequestrequest)...{try...{booleanfirst=true;StringBufferstrbuf=newStringBuffer("");Enumeration
阅读全文
摘要:平时做JAVA总是会遇到强制转换的时候,一般单个对象强制转换很方便,例如Bb=null;A a=(A)b;但是, B[] b=null; A[] a=(A[])b却会导致异常发生,为了解决这个问题,我们不得不对数组中每个元素单独进行强制转换,for(int i=0;i<b.length;i++) a[i]=(A)b[i];如果只有这么两种类型进行转换也好,要是还有C类型到D类型等等很多其他类型怎么办? 鉴于这个原因,我写了一个通用的强制对数组进行转换的函数,对于上面这个转换只需要调用 A[] a=(A[])TestCast.cast(b,A.class) 就可以解决问题,很是方便;具体代
阅读全文
摘要:折半查找算法算法思想: 将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。 算法步骤描述: step1 首先确定整个查找区间的中间位置 mid = ( left + right )/ 2 step2 用待查关键字值与中间位置的关键字值进行比较; 若相等,则查找成功 若大于,则在后(右)半个区域继续进行折半查找 若小
阅读全文
摘要:排序算法来自 维客Jump to: navigation, search 排序算法 O(n²)或更坏 冒泡排序 插入排序 快速排序 选择排序 O(n3/2)或更好 二叉树排序 桶排序 ...
阅读全文