- 浏览: 153150 次
- 性别:
- 来自: 武汉
最新评论
-
hardPass:
貌似二分法,没有一个合并的过程
简单_分治算法 -
zhufeng1981:
讲解的不错,支持一下。
简单_分治算法 -
a346063587:
嗯。。的确,基础很重要!
关于递归和尾递归的原理 -
zhufeng1981:
huoyj 写道基础很重要,这是永远不变的真理。 很赞同这句话 ...
关于递归和尾递归的原理 -
huoyj:
基础很重要,这是永远不变的真理。 很赞同这句话
关于递归和尾递归的原理
文章列表
原型模式说白了也就是克隆自身,为了解决某些复杂对象的创建工作而生的。
网上许多关于原型模式的文章东西倒是说了很多而且还扯到了工厂模式等一些其他的模式,
我个人认为那样真是啰嗦的要死不说还把问题搞负责了。
克隆分为浅克隆和深克隆,浅克隆紧紧克隆对象的基本数据类型的值,深克隆会连引用类型也克隆。JAVA中凡是实现了java.lang.Cloneable接口的类都具有克隆功能,而这样的克隆是浅克隆的,深克隆的原理是:通过把克隆对象序列化到内存然后再反序列化读出。
package design.prototype;
import java.io.ByteArrayInputStream;
...
jdk中io流InputStreamReader/OutputStreamWriter就运用了适配器模式,
其目的就是为了把字节流接口转换成字符流接口来使用。
写这篇文章使我搞清楚了 代理模式(Proxy)、装饰模式(Decorator)、适配器模式(Adapter)之间的区别,其实写技术文 ...
调停者模式(mediator)/中介者模式:
以唐僧作为调停者,孙悟空、八戒、沙僧他们互相进行问候.为例子。
假设他们3个互相打招呼不用这个设计模式而是直接打招呼,那么以后有改动的话将会很无奈,用了该模式后会发现以后即便需要改动了也不需要改动什么,顶多就是改动下调停者的逻辑实现。
package design.mediator2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午05:21:45 <br>
*
*/
public class Test {
p ...
以“见人说人话见鬼说鬼话”来理解模板方法模式:
package design.templateMethod2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-2-4 下午08:21:37 <br>
*
*/
public class Test {
public static void main(String[] args) {
/*
* 模板方法模式(Template Method)
* 俗话说,见人说人话见鬼说鬼话,其实就是模版方法模式的最好理 ...
代理模式是一种很常用的设计模式,其目的是对其他对象提供一种代理以控制对这个对象的访问。
代理模式又分为静态代理和动态代理,静态代理是在程序运行之前就已经存在了代理类,动态代理是程序运行中在内存中生成代理类。
代理模式存在的意义:代理模式是为了解决滥用继承的问题而生的,当想对某个类的功能进行扩充的时候可以使用继承或聚合,很明显用继承的话会造成类泛滥,还有一点就是继承是类具有很强的层级关系的情况下用才好,而紧紧对某个类进行功能的扩充就拿起继承的大刀明显的不合适,那么用聚合呢?聚合是一种松耦合的,用聚合创建的代理类就是静态代理,还有更好的代理是动态代理。
动态代理自己实现其实也很简单,不过JD ...
命令模式定义:命令模式用一句话表示就是说:一个命令一个类。在面向对象程式设计的范畴中,命令模式是一种设计模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
先来看一看我本人认为每个人学设计模式不得不看的图,尽管“奇丑无比”,甚至曾经“束缚过我们的思想”
这个模式非常的简单,许多人都说JDK中的
java.lang.Runnable
javax.swing.Action
使用到了此模式,但javax.swing.Action我没看出来,可能是我眼拙只看到用了listener模式,这个很明显。
---------- ...
jdk中的UI事件模型使用的是发布订阅模式,但是jdk也提供了观察者模式的支持,对于名字上的区别可能发现不了什么东东,为什么UI事件模型用的是发布订阅模式而非观察者模式,在参考了一些网上的文章后明白了一点,现记录下。
先来看看jdk中ui事件模型的理论代码(参考jdk写的):
package design.eventListener2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-4 上午10:51:36 <br>
*
*/
public class Test {
pu ...
方法工厂模式属于创建型模式,很简单很实用,java.util.Collection.#iterator即运用了此模式。以下的代码是本人初学设计模式的简单理解,参考于java.util.Collection.#iterator
package design.methodFactory2;
/**
* @author 作者 E-mail: jqsl2012@163.com
* @version 创建时间:2012-1-27 下午10:11:49 <br>
*
*/
public class Test {
public static void main(S ...
简单_策略模式(Strategy)
- 博客分类:
- 设计模式
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)
package design.strategy;
/**
* @author 作者 E-mail ...
(1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如: ThisIsAClassName thisIsMethodOrFieldName 若在定义中出现了常数初始化 ...
没有事做,就会堕落。。
这个世界有太多的浮躁,要耐得住诱惑;
要时刻告诫自己,认清方向,否则就可能就真的堕落了!!
闲来无事学习了java正则表达式及java.util.regex包
贴上学习的代码,虽然是入门级的东东,希望能以此方式记录下自己曾经努力过付出过。
参考正则表达式http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
package sunfa.lx;
import java.util.Arrays;
import java.util.regex.Patt ...
周允许的是1-7 其中1是周日 7是周六
格式: [秒] [分] [小时] [日] [月] [周] [年]
序号 说明
是否必填 允许填写的值 允许的通配符
1 秒 是 0-59 , - * /
2 分 是 0-59 , - * /
3 小时 是 0-23 , - * /
4 日 是 1-31 , - * ...
常用语法
EG.一个对象BOOK
1.输出 $…{book.name}
空值判断:$…{book.name?if_exists },
$…{book.name?default(‘xxx’)}//默认值xxx
$…{ book.name!”xxx”}//默认值xxx
日期格式:$…{book.date?string(’yyyy-MM-dd’)}
数字格式:$…{book?string.number}–20
$…{book?string.currency}–<#-- $20.00 -->
$…{book?string.percent}—<#-- 20% --> ...
闲来无事学习了下quartz框架,其实JAVA下的定时器框架还有几个,比如java.util.Timer可以实现简单的定时器任务,但是呢这个东东有个缺点就是一个Timer内部只开了一个线程来跑的,所以它只适合做最简单的单任务事情,如果有多件事情在同一时刻发生,那么它只能做完其中一件事情才能再去做另外一件事情,请看:http://jqsl2012.iteye.com/blog/1188184
还有一个呢就是jdk1.5出的java.util.concurrent.*,这个东东可以同时处理N件事情,但是呢如果你想处理比较复杂的定时任务,就得自己搞了,其实可以借助与java.util.Calenda ...
freeMarker是一个 JAVA开源模版引擎
下面以创建一个静态的HTML页面为例作为入门:
首先需要去下载freeMarker的包,地址http://www.freemarker.org/index.html
该地址含有中文的pdf帮助文档
package freemarker;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
...