原文地址:
http://www.c2.com/cgi/wiki?ResourceReleasesResource
随记:网站上第二小节的Architectural idioms:里面文章都有些太长,也许是很重要,参与的人比较多,不过还是等空闲点再翻翻.
文章第一段描述的是..一种比较早的解决资源回收问题的处理接口,特别可以用于管理比较宝贵的资源时候进行使用.
优点如下:
1:它是可重用和抽象的
2:提供对所有资源文件统一的管理 //并不准确..大概这个意思
3:他没有对多少客户端运行访问限制
这里有一个快速写下的抽象类
public abstract class AbstractResource
{
abstract protected begin(ResourceClient client, Object object);
abstract protected end(ResourceClient client, Object object);
public void consume(ResourceClient client, Object object)
{
begin(client, object);
try {
client.consume(this, object);
} finally {
end(client, object);
}
}
}
public interface ResourceClient
{
abstract public void consume(
AbstractResource resource,
Object object
);
}
批注:这里使用特别的抽象接口,组合对类回收格式和调用格式的约定,很好的封装了对资源文件调用以及回收的格式,方便重用与统一调用
如果一个对象需要使用一个资源超出了一个方法的调用..可以参考 AbstractSessionPattern
http://www-dse.doc.ic.ac.uk/~np2/patterns
在系统的一些地方,经常或者一直出现一个对象使用一个方法拥有对资源文件的调用,在那对象之上使用.当它的方法结束,回收那资源.
甚至在事件驱动的环境,经常使用一些状态,一些地方,那相当于真正的对象,这个方法也许看起来如:
[self finished] whileFalse: [self waitSeconds: 30]
在这个期间,所有的其他对象和资源受到该对象的控制.
批注: 么有看懂这个代码...意思也比较模糊的理解
后半段..明天翻译