Question: Consider the use of the "extent" variable on GoF p. 208 and pp. 213-215. The discussion on pages 213-215 is a bit confusing and refers to caching the image extent and saving and loading it. Sort this out and explain it. What is the difference in the Save and Load for the Image and the ImageProxy? When is each used? Come up (if you can) with a reasonable scenario where a client will request the extent of an image that has not yet been loaded and it will get the cached extent without loading the image itself. Answer: You sort of threw out the question in class "is this a good idea and does it work?" yes and yes. The "cached image extent and file name" refer to the variables Image* _image char* _filename that are part of the ImageProxy class. These have been initialized and are in cache along with the proxy object. Save writes them to disk. Load reads them from disk. There is no difference in the save and load for the ImageProxy and the Image. The ImageProxy class handles all calls to save and load never passing them on to Image. void ImageProxy::Save (ostream& to) { to << _extent << _fileName; } void ImageProxy::Load (istream& from) { from >> _extent >> _fileName; } You gave away the answer to the scenario question in class. I have on my web site torches along the left margin. When the mouse is moved over one of these torches an image appears in what had been a blank space. The image is not loaded unless the mouse event triggers it to be, but the size of the image is needed for the page to place items above and below where it will go. ------------------------- | | |visible | | | |visible | |------- | | |size | | |only | | | | |------- | | | |visible | | | | | | | | | | | | | | | | | ------------------------