摘要: 职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。例如:在大学里面当班干部,时常要向上级申请各方面的东西。譬如申请全班外出秋游,普通同学将申请表交给班长,班长签字之后交给辅导员,辅导员批准之后上交到主任办公室…就是这样,一个请求(这里是一份申请表)有时候需要经过好几个级别的处理者(这里是辅导员、主任)的审查才能够最终被确定可行与否。即不同的处理者对同一个请求可能担负着不同的处理方式、权限,但是我们希望这个请求必须到达最 阅读全文
posted @ 2012-10-29 10:08 何长春 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 最近这几个月都没怎么写博客了,因为工作太忙了,在赶着做淘宝直通车的一个项目,从不知道什么是直通车开始到深入了解开车再到现在把项目做完!说实话两个人一个多月做完这个项目,真不容易……还没让美工做处理图片的,先放一张效果图吧!做了一个桌面版和web版的,前端是用flex,后台采用java,通信用BlazeDS中间件的,因为要淘宝授权,且都经过服务器端,所以桌面版有一点点不同,需要java主要推送消息。说说用到的技术点吧!java中接口主要用的是TQL吧!比较麻烦一点的就是如何分词吧……flex中可以主要是改写的组件比较多一点吧!还有处理一些淘宝不规则的json格式,相应的一些报表……源码的话,因为 阅读全文
posted @ 2012-10-25 12:33 何长春 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 比较两个字符串的相似度,核心算法是用一个2维数组记录每个字符串是否相同,如果相同记为0,不相同记为1,每行,每列的相同个数累加,则数组最后一个数为不相同个数的总数。从而判断这两个字符串的相似度,在判断大小写时,没有区分大小写,即大小写视为相同的字符。package com.qinsoft.test;public class Levenshtein{ private int compare(String str, String target) { int d[][]; // 矩阵 int n = str.length(); ... 阅读全文
posted @ 2012-09-29 10:23 何长春 阅读(15313) 评论(0) 推荐(0) 编辑
摘要: jsp 版本的文件管理器,通过该程序可以远程管理服务器上的文件系统,您可以新建、修改、删除、下载文件和目录。对于windows系统,还提供了命令行窗口的功能,可以运行一些程序,类似与windows的cmd。如图:<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.io.*,java.util.*,java.net.*"%><%!private final static int languageNo = 0; //语言版本,0 : 中文; 阅读全文
posted @ 2012-09-29 10:06 何长春 阅读(1167) 评论(0) 推荐(0) 编辑
摘要: 策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。抽象策略角色:通常用一个抽象类或者接口来实现,主要是定义这个算法所完成的功能具体策略角色:包装了相关算法和行为环境角色:持有策略类的引用使用场景:1) 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为。2) 如果系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些算法类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则。客户端可以选择使用任何一个具. 阅读全文
posted @ 2012-09-12 15:15 何长春 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 状态模式:允许对象在其内部状态改变时改变他的行为。对象看起来似乎改变了他的类。1. 策略模式和状态模式是双胞胎,它们有相同的类图,但是它们的意图不同。策略模式是围绕可以互换的算法来成功创建业务的,然而状态模式是通过改变对象内部的状态来帮助对象控制自己的行为.2. Context将与状态相关的操作委托给当前的Concrete State对象处理。3. Context可将自身作为一个参数传递给处理该请求的状态对象。这使得状态对象在必要时可访问Context。4. Context或Concrete State类都可决定哪个状态是另外哪一个的后继者,以及是在何种条件下进行状态转换。也就是说可以在Sta 阅读全文
posted @ 2012-09-12 12:01 何长春 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 命令模式:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。Command: 定义命令的接口,声明执行的方法。ConcreteCommand: 命令接口实现对象,是“虚”的实现;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。Receiver: 接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。Invoker: 要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户... 阅读全文
posted @ 2012-09-12 11:20 何长春 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。方法模式的特点:把不变的行为搬到超类,去除子类中重复的代码来体现他的优势。应用场景:需要定义一些顶级逻辑 或者是一个操作中算法的骨架,希望一些步奏的执行推迟到其子类中时 应该考虑模板模式。例如:考虑一个计算存款利息的例子。假设系统需要支持两种存款账号,即货币市场(Money Market)账号和定期存款(Certificate of Deposite)账号。这两种账号的存款利息是不同的,因此,在计算一个存户的存款利息额时,必须区分两种不同 阅读全文
posted @ 2012-09-12 10:28 何长春 阅读(164) 评论(0) 推荐(0) 编辑
摘要: Timer和ScheduledExecutorService都可以用来做定时任务,有管理任务延迟执行("如1000ms后执行任务")以及周期性执行("如每500ms执行一次该任务")。但至从JDK1.5之后,建议采用ScheduledExecutorService。原因如下:1、Timer对调度的支持是基于绝对时间,而不是相对时间的,由此任务对系统时钟的改变是敏感的;但ScheduledThreadExecutor只支持相对时间。2、如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为。Timer线程并不捕获异常,所以 TimerTa 阅读全文
posted @ 2012-08-16 14:09 何长春 阅读(2612) 评论(0) 推荐(0) 编辑
摘要: 1、慎用异常异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。2、不要重复初始化变量默认情况下,调用类的构造函数时,Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成0.0,逻辑值设置成false。当一个类从另一个类 阅读全文
posted @ 2012-08-08 11:09 何长春 阅读(361) 评论(0) 推荐(0) 编辑