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
对象被载入时,只有键值被载入。只有当其他字段需要访问时,才通过键值获得其他所有字段。