创建型模式—原型模式

原型模式(Prototype)用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。


Prototype Pattern也是一种创建型模式,它关注的是大量相同或相似对象的创建问题。应用原型模式就是建立一个原型,然后通过对原型来进行复制的方法,来产生一个和原型相同或相似的新对象,或者说用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。



原型模式具有以下特点:

  对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目;

  允许客户只通过注册原型实例就可以将一个具体产品类并入到系统中,客户可以在运行时刻建立和删除原型;

  减少了子类的构造。原型模式是Clone一个原型而不是请求工厂方法创建一个,所以它不需要一个与具体产品类平行的Creator类层次;

  原型模式具有给一个应用软件动态加载新功能的能力。由于Prototype的独立性较高,可以很容易动态加载新功能而不影响旧系统;

  产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何的等级结构;

原型模式的最重要缺点就是每一个类必须配备一个Clone方法,而且这个Clone方法需要对类的功能进行通盘考虑。这对全新的类来说不是很难,但对已有的类进行改造时,不一定是容易的事。


namespace CloneTest
{
    public class CloneTest
    {
        public CloneTest() { }
        public void CloneMember()
        {
            Member member = new Member()
            {
                UserName = "用户名",
                NickName = "昵称",
                Address = new Address()
                {
                    Provice = "上海",
                    City = "上海市"
                }
            };

            Member memberClone = (Member)member.Clone();
            memberClone.UserName = "浅拷贝用户名";
            //引用类型指向的是同一个地址,因此,member对象中的Provice的值也会变成“浅拷贝上海”
            memberClone.Address.Provice = "浅拷贝上海";
        }
    }
    public class Member : ICloneable
    {

        public string UserName { get; set; }

        public string NickName { get; set; }

        public Address Address { get; set; }

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

    public class Address
    {
        public string Provice { get; set; }

        public string City { get; set; }
    }
}

克隆(Clone)中的深拷贝和浅拷贝


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值