博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第 9 章 —— 原型模式
阅读量:5033 次
发布时间:2019-06-12

本文共 1631 字,大约阅读时间需要 5 分钟。

9.3 原型模式

    原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。

  抽象原型类:

abstract class Prototype    {        private string id;        public Prototype(string id)        {            this.id = id;        }        public string Id        {            get { return id; }        }        public abstract Prototype Clone();          //抽象类关键就是有这样一个Clone方法    }

  具体原型类:

class ConcretePrototype : Prototype    {        public ConcretePrototype(string id) : base(id)        { }        public override Prototype Clone()        {            return (Prototype)this.MemberwiseClone();       //创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,            //则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象:因此,原始对象及其副本引用为同一对象        }    }

  客户端代码:

static void Main(string[] args)        {            ConcretePrototype p1 = new ConcretePrototype("I");            ConcretePrototype c1 = (ConcretePrototype)p1.Clone();       //克隆ConcretePrototype的对象p1就能得到新的实例c1            Console.WriteLine("Cloned:{0}", c1.Id);            Console.Read();        }

    一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高。

9.5 浅复制与深复制

    MemberwiseClone() 方法是这样的,如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其副本引用同一对象。换句话说就是,如果你的“简历”类当中有对象引用,

  那么引用的对象数据是不会被克隆过来的。

    举个例子你就明白了,你现在的“简历”类当中有一个“设置工作经历”的方法,在显示设计当中,一般会再有一个“工作经历”类,当中有“时间区间”和“公司名称”等属性,“简历”类直接调用这个对象即可。

  工作经历类:

  class WorkExperience      {          public string WorkDate { get; set; }      //好像是使用这种方式类中所有的属性都要使用这种方式,所以这种方式好像只适合那些其他方法并不调用私有变量的类          public string Company { get; set; }      }

  简历类:

转载于:https://www.cnblogs.com/zhangchaoran/p/8547598.html

你可能感兴趣的文章
Notes: CRM Analytics–BI from a CRM perspective (2)
查看>>
graphite custom functions
查看>>
列出所有的属性键
查看>>
js获取请求地址后面带的参数
查看>>
设计模式のCompositePattern(组合模式)----结构模式
查看>>
二进制集合枚举子集
查看>>
磁盘管理
查看>>
SAS学习经验总结分享:篇二—input语句
查看>>
UIImage与UIColor互转
查看>>
RotateAnimation详解
查看>>
系统管理玩玩Windows Azure
查看>>
c#匿名方法
查看>>
如何判断链表是否有环
查看>>
【小程序】缓存
查看>>
ssh无密码登陆屌丝指南
查看>>
MySQL锁之三:MySQL的共享锁与排它锁编码演示
查看>>
docker常用命令详解
查看>>
jQuery技巧大放送
查看>>
字符串转换成JSON的三种方式
查看>>
Hive时间函数笔记
查看>>