package test;
public class A {
private B b;
public A(B b){
this.b=b;
}
}
package test;
public class B {
}
package test;
/**
* 测试类
*
*/
public class Test {
public static void main(String[] args){
B b=new B();
A a=new A(b);
a=null;//a指向的实例对象A将会被GC,A中的成员变量b也会GC,
//但是它指向的实例对象B,并不会被GC,因为Test类的main方法还没结束,
//仍然有局部变量b指向它(实例对象B)
//.......
//......
}
}
组合,就是同死,比如A中包含了一个B,A死了,则B也会死。用代码简单表示,如下。
package test;
public class A {
private B b;
public A(){
this.b=new B();
}
}
package test;
public class B {
}
package proxy;
/**
* 使用继承计算tank移动的时间
*/
public class Tank1 extends TankImpl{
@Override
public void move(){
long start=System.currentTimeMillis();
super.move();
long end = System.currentTimeMillis();
System.out.println("移动了"+(end-start)+" 毫秒");
}
}
package proxy;
/**
*使用组合计算tank移动的时间
*/
public class Tank2 implements Moveable{
private Moveable t=new TankImpl();
public Tank2(){
}
public void move(){
long start=System.currentTimeMillis();
t.move();
long end = System.currentTimeMillis();
System.out.println("移动了"+(end-start)+" 毫秒");
}
}
package proxy;
/**
*使用聚合计算tank移动时间
*/
public class Tank3 implements Moveable{
private Moveable t;
public Tank3(Moveable t){
this.t=t;
}
public void move(){
long start=System.currentTimeMillis();
t.move();
long end = System.currentTimeMillis();
System.out.println("移动了"+(end-start)+" 毫秒");
}
}
package proxy;
/**
*测试类
*/
public class Client {
public static void main(String[] args){
System.out.println("=======继承计算tank移动时间========");
new Tank1().move();
System.out.println("=======组合计算tank移动时间========");
new Tank2().move();
System.out.println("=======聚合计算tank移动时间========");
new Tank3(new TankImpl()).move();
}
}