namespace _05_prototype
{
public abstract class NormalActor
{
public abstract NormalActor Clone();
}
public abstract class FlyActor
{
public abstract FlyActor Clone();
}
public abstract class WaterActor
{
public abstract WaterActor Clone();
}
[Serializable]
public class NormalActorA : NormalActor
{
public override NormalActor Clone()
{
//return (NormalActor)this.MemberwiseClone(); //按成员拷贝,浅拷贝。。。要求深拷贝!
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, this);
stream.Position = 0;
return formatter.Deserialize(stream) as NormalActor;
}
}
[Serializable]
public class NormalActorB : NormalActor
{
public override NormalActor Clone()
{
return (NormalActor)this.MemberwiseClone();
}
}
[Serializable]
public class FlyActorA : FlyActor
{
public override FlyActor Clone()
{
return (FlyActor)this.MemberwiseClone();
}
}
[Serializable]
public class FlyActorB : FlyActor
{
public override FlyActor Clone()
{
return (FlyActor)this.MemberwiseClone();
}
}
[Serializable]
public class WaterActorA : WaterActor
{
public override WaterActor Clone()
{
return (WaterActor)this.MemberwiseClone();
}
}
[Serializable]
public class WaterActorB : WaterActor
{
public override WaterActor Clone()
{
return (WaterActor)this.MemberwiseClone();
}
}
class Actor
{
}
/// <summary>
/// NormalActorA NormalActorB
/// FlyActorA FlyActorB
/// WaterActorA WaterActorB
/// </summary>
public class GameSystem
{
//NormalActor normalActor;
//FlyActor flyActor;
//WaterActor waterActor;
//public GameSystem(NormalActor normalActor, FlyActor flyActor, WaterActor waterActor)
//{
// this.normalActor = normalActor;
// this.flyActor = flyActor;
// this.waterActor = waterActor;
//}
public void Run(NormalActor normalActor, FlyActor flyActor, WaterActor waterActor)
{
//new是不具备多态特征的??
NormalActor normalActor1 = normalActor.Clone();
NormalActor normalActor2 = normalActor.Clone();
NormalActor normalActor3 = normalActor.Clone();
NormalActor normalActor4 = normalActor.Clone();
NormalActor normalActor5 = normalActor.Clone();
FlyActor flyActor1 = flyActor.Clone();
FlyActor flyActor2 = flyActor.Clone();
WaterActor waterActor1 = waterActor.Clone();
WaterActor waterActor2 = waterActor.Clone();
WaterActor waterActor3 = waterActor.Clone();
}
}
internal class Program
{
static void Main(string[] args)
{
GameSystem gameSystem = new GameSystem();
gameSystem.Run(new NormalActorA(), new FlyActorA(), new WaterActorA());
}
}
}
05.原型模式
最新推荐文章于 2025-04-06 23:20:56 发布