05.原型模式

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());
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值