Unlike ResourceAcquisitionIsInitialization, LoadOnDemand defers the creation of a costly resource to a point in time when that resource is actually needed. Often, that point in time is never, which is a quite substantial improvement.
Common implementations use a flag (bool loaded, bool opened, etc.), or create an empty envelope that fills itself when it's opened (yeah, the metaphor is lacking there).
Is this analogous to DeferredInstantiation?? -- DrewMarsh
No, it's more special in that it implies a costly resource. DeferredConstruction? is a way to implement LoadOnDemand, but DeferredInstantiation? covers more cases, like when you need to supply some data to open a resource (like some resource identifier, which is needed to access the resource).
Is this like LazyObject? -- ErikMeade