当我们想做一款游戏时,比如有一个主角,然后有很多怪物时,这种情况下,如果每个怪物都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的长度
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。