用Java动态代理类实现记忆功效[Java编程]
本文“用Java动态代理类实现记忆功效[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
记忆是衍生自Lisp,Python,和Perl等历程性语言的一种计划情势,它可以对上次的计算后果举行记忆. 一个实现了记忆功效的函数, 带有显式的cache, 所以, 已经计算过的后果就可以直接从cache中得到, 而不用每次都举行计算.
记忆能明显的晋升大计算量代码的效率. 并且是一种可重用的筹划.
本文阐述了在Java中利用这一情势的办法,并供应了一个可以供应上述功效的"记忆类":
Foo foo = (Foo) Memoizer.memoize(new FooImpl());
这里,Foo是一个接口,它含有的办法是需求记忆的.FooImpl是Foo的一个实现.foo是Foo的一个引用.办法与FooImpl基本相同,辨别在于Foo返回的值,会被缓存起来.单个记忆类的长处在于为任何类增添记忆功效是很简单的:定义一个包含需求记忆的办法的接口,然后调用memoize来实现一个实例.
为了理解记忆类是怎么实现的,我们将分几步来注释.首先,我注释一下为什么缓存可以在需求它的类中实现.然后,我测试一下如作甚一个特定的类增添缓存包装器.最后,我注释一下若何才能使得一个缓存包装器可以通用于肆意的类.
为大计算量的程序增添缓存
作为一个大计算量程序的例子,我们考虑PiBinaryDigitsCalculator这个例子-计算二进制数据pi.唯一的public办法calculateBinaryDigit带有一个参数:整数n,代表需求切确到的位数.比方,1000000,将会返回小数点后的一百万位,通过byte值返回-每位为0大概1.
public class PiBinaryDigitsCalculator {
/**
* Returns the coefficient of 2^n in the binary
* expansion of pi.
* @param n the binary digit of pi to calculate.
* @throws ValidityCheckFailedException if the validity
* check fails, this means the implementation is buggy
* or n is too large for sufficient precision to be
* retained.
*/
public byte calculateBinaryDigit(final int n) {
return runBBPAlgorithm(n);
}
private byte runBBPAlgorithm(final int n) {
// Lengthy routine goes here ...
}
}
以上是“用Java动态代理类实现记忆功效[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |