使用”引用计数”跟踪仍旧访问着共享对象的对象数量
class Shared{
private int refcount=0 ;
private static long counter=0 ;
private final long id=counter++;
public Shared (){
System.out .println("Creating" +this );
}
public void addRef{refcount++;}
protected void dispose (){
if (--refcount==0 )
System.out .println("Disposing" +this );
}
public String toString (){
return "Shared" +id;
}
}
class Composing{
private Shared shared;
private static long counter=0 ;
private final long id=counter++;
public Composing (Shared shared){
System.out .println("Creating" +this );
this .shared=shared;
this .shared.addRef();
}
protected void dispose (){
System.out .println("disposing" +this );
shared.disposing();
}
public String toString (){return "Composing" +id;}
}
public class ReferenceCounting{
public static void main (String[] args){
Shared shared=new Shared();
Composing[] composing={
new Composing(shared);
new Composing(shared);
new Composing(shared);
new Composing(shared);
}
for (Composing c:composing)
c.dispose();
}
}