当我们想做一款游戏时,比如有一个主角,然后有很多怪物时,这种情况下,如果每个怪物都new一个实例,将占用大量内存,实际上,大部分怪物只有坐标位置不同,其余都相同,这种情况下,就需要用到原型模式,仅修改坐标等少量属性,大部分内存共用。
首先集成ICloneable接口,克隆对象浅拷贝
参考代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpDesignPattern.Prototype
{
    public class Monster :ICloneable
    {
        public int X { get; set; }

        public int Y { get; set; }

        public Monster(int x,int y) 
        {
            X = x;
            Y = y;
        }        

        public object Clone()
        {
            return this.MemberwiseClone();
        }
    }
}

然后我们创建一个怪物工厂,用单例的方式来不断创建同一个实例下的不同坐标的怪物

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharpDesignPattern.Prototype
{
    public class MonsterFactory
    {
        private static Monster protoType = new Monster(10,10);

        public static void Test()
        {

        }

        public static Monster Instance(int x, int y)
        {
            var cloneOne = protoType.Clone() as Monster;
            cloneOne.X= x;
            cloneOne.Y= y;
            return cloneOne;
        }
    }
}

最后,无论创建多少个怪物,实际上仅多2个x,y两个int的长度


Wittgenstein
1 声望0 粉丝