【学习贴】设计模式——原型模式

【原型模式】虽然叫做原型模式,但我感觉更适合叫克隆模式(想起来LOL~),因为这个设计模式完全是在讲如何实现克隆,或者用计算机术语来说是拷贝。
惯例,先贴代码。

public class DesignMode_CloneMode : MonoBehaviour {
    private Cell mCellOne;
    // Use this for initialization
    void Start () {
        mCellOne = new Cell();
        mCellOne.mCellName = "细胞1号";
        //细胞分裂出2号细胞
        Cell mCellTwo = mCellOne.Clone() as Cell;
        mCellTwo.mCellName = "细胞2号";
        mCellTwo.Key.Clear();
        mCellTwo.Key.Add(222);
        //2号细胞又分裂出3号细胞
        Cell mCellThree = mCellTwo.Clone() as Cell;
        mCellThree.mCellName = "细胞3号";
        
        print(mCellOne.mCellName+mCellOne.Key[0]);
        print(mCellTwo.mCellName+mCellTwo.Key[0]);
        print(mCellThree.mCellName + mCellThree.Key[0]);
        mCellOne.Key.Clear();
        mCellOne.Key.Add(221);
        print(mCellTwo.mCellName + mCellTwo.Key[0]);
        print(mCellThree.mCellName + mCellThree.Key[0]);

    }

}
/// <summary>
/// 细胞类,继承自ICloneable接口
/// </summary>
public class Cell : ICloneable
{
    /// <summary>
    /// 细胞名字
    /// </summary>
    public string mCellName;
    /// <summary>
    /// 姑且叫做基因密码吧
    /// </summary>
    public List<int> Key = new List<int>();
    public object Clone()
    {
        System.Object ob = null;
        try
        {
            ob = MemberwiseClone();
        }
        catch (Exception)
        {
            Debug.LogError("异常");
        }
        return ob;
    }
    public Cell()
    {
        Key.Add(111);
    }
}

首先呢,需要拷贝的类需要继承自ICloneable接口,在实现接口方法里通过调用MemberwiseClone()方法实现拷贝(我再网上看Java也有一个类似的接口)。原型模式呢主要是讲实例化的过程简化,个人感觉好像用的地方不是很多。
运行结果
可以看到当改变细胞1号的key后,2号和3号的key也变成了“221”,这个也就是浅拷贝。可能大家会有疑问为什么要复杂的定义一个list类型的key而不是int或者string类型,因为list是引用类型,才能实现浅拷贝,而string,int的拷贝属于深拷贝。
我举个解释的深、浅拷贝的栗子:从电脑上复制游戏(从D盘拷到F盘吧),浅拷贝就是复制了游戏的快捷方式,深拷贝就是把游戏的所有东西都复制到F盘。这样的后果大家应该也都知道,复制了快捷方式,表面上,我们是复制了游戏,我们仍然可以点击快捷方式进入游戏,因为快捷方式是始终指向游戏的exe目录位置的,但如果游戏文件损坏了,这时候再点击快捷方式已经进不去游戏了。深拷贝那就是D、F盘都有一份游戏,都能通过各自的快捷方式进入游戏,两者中任意一个游戏文件损坏不会影响另一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带酒书生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值