Bootstrap

【设计模式】【代理模式,大图片加载】


/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee [email protected]
 * @version  1.0
 */
public interface Image
{
	void show();
}



/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee [email protected]
 * @version  1.0
 */

//使用该BigImage模拟一个很大图片
public class BigImage implements Image
{
	public BigImage()
	{
		try
		{
			//程序暂停3s模式模拟系统开销
			Thread.sleep(3000);
			System.out.println("图片装载成功...");
		}
		catch (InterruptedException ex)
		{
			ex.printStackTrace();
		}
	}
	//实现Image里的show()方法
	public void show()
	{
		System.out.println("绘制实际的大图片");
	}
}




/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee [email protected]
 * @version  1.0
 */
public class ImageProxy implements Image
{
	//组合一个image实例,作为被代理的对象
	private Image image;
	//使用抽象实体来初始化代理对象
	public ImageProxy(Image image) 
	{
		this.image = image;
	}
	/**
	 * 重写Image接口的show()方法
	 * 该方法用于控制对被代理对象的访问,
	 * 并根据需要负责创建和删除被代理对象
	 */
	public void show()
	{
		//只有当真正需要调用image的show方法时才创建被代理对象
		if (image == null) 
		{
			image = new BigImage();
		}
		image.show();
	}
}



/**
 * Description:
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee [email protected]
 * @version  1.0
 */
public class BigImageTest
{
	public static void main(String[] args) 
	{
		long start = System.currentTimeMillis();
		//程序返回一个Image对象,该对象只是BigImage的代理对象
		Image image = new ImageProxy(null);
		System.out.println("系统得到Image对象的时间开销:" + 
			 (System.currentTimeMillis() - start));
		//只有当实际调用image代理的show()方法时,程序才会真正创建被代理对象。
		image.show();	
	}
}




悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;