Lazy Load目的是为了避免过早载入占用较多资源的对象或其他系统资源。譬如PC游戏,如果没有手柄,就没有必要在游戏运行时就载入手柄相关的模块,可以等到需要手柄是再载入。
1. Lazy Initiliaze
设置一个标记位标识是否已载入对象,如果访问对象时未载入该对象,那么载入对象
2. Vritual Proxy
使用一个和目标对象接口相同的代理类。当代理类方法被调用时,将载入目标对象。目标对象方法调用都委托代理类调用。
Virtual Proxy public interface IWeapon { void Fire(); } public class MachineGun : IWeapon { public void Fire() { System.Console.WriteLine("MachineGun Firing"); } } public class WeaponSystemProxy : IWeapon { private IWeapon Weapon; private void LoadWeapon() { if(Weapon == null) Weapon = new MachineGun(); } public void Fire() { LoadWeapon(); Weapon.Fire(); } } public class WarShip { private IWeapon Weapon; public WarShip(IWeapon weapon) { this.Weapon = weapon; } public void Attack() { Weapon.Fire(); } }
3. Value Holder
通过使用getValue获得通用类型的真实对象。当调用getValue时,对象会被载入。
4. Ghosts
对象被载入时,只有键值被载入。只有当其他字段需要访问时,才通过键值获得其他所有字段。