Lazy Load四种实现

本文介绍了LazyLoad技术的目的及其四种实现方式:LazyInitialize、VirtualProxy、ValueHolder和Ghosts。通过实例详细展示了如何利用代理模式来延迟加载武器系统,从而节省资源。

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

对象被载入时,只有键值被载入。只有当其他字段需要访问时,才通过键值获得其他所有字段。

转载于:https://www.cnblogs.com/Thor/archive/2010/05/18/1738521.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值