当前位置: 首页 > news >正文

福州网站建设方案推广东营最新消息今天

福州网站建设方案推广,东营最新消息今天,怎样用c语言做网站,沈阳做网站公司有哪些1#xff0e;概述 意图#xff1a;我们将已经存在的对象作为原型#xff0c;用户可以通过复制这些原型创建新的对象。 使用场合#xff1a;当一个系统应该独立于产品的创建、构造和表示时#xff0c;可以使用原型模式。在原型模式中#xff0c;产品的创建和初始化…1概述     意图我们将已经存在的对象作为原型用户可以通过复制这些原型创建新的对象。     使用场合当一个系统应该独立于产品的创建、构造和表示时可以使用原型模式。在原型模式中产品的创建和初始化再类的Clone方法中完成。在使用是我们可以用一些列原型对象来代替生成相应对象的工厂对象并且可以使拷贝、粘贴等操作独立于需要复制的对象。     结构     原型模式Prototype用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象。原型模式说白了就是从一个对象再创建另外一个可定制的对象而且不需要直到任何创建的细节。          原型模式基本代码    原型类Codepublic abstract class Prototype    {        private string id;        // Constructor         public Prototype(string id)        {            this.id  id;        }        // Property         public string Id        {            get { return id; }        }        public abstract Prototype Clone();    }     具体原型类 Codepublic class ConcretePrototype1 : Prototype    {        // Constructor         public ConcretePrototype1(string id)            : base(id)        {        }        public override Prototype Clone()        {            // Shallow copy             return (Prototype)this.MemberwiseClone();        }    }    public class ConcretePrototype2 : Prototype    {        // Constructor         public ConcretePrototype2(string id)            : base(id)        {        }        public override Prototype Clone()        {            // Shallow copy             return (Prototype)this.MemberwiseClone();        }    }     客户端Code            ConcretePrototype1 p1  new ConcretePrototype1(I);            ConcretePrototype1 c1  (ConcretePrototype1)p1.Clone();            Console.WriteLine(Cloned: {0}, c1.Id);            ConcretePrototype2 p2  new ConcretePrototype2(II);            ConcretePrototype2 c2  (ConcretePrototype2)p2.Clone();            Console.WriteLine(Cloned: {0}, c2.Id);     2 实例     对于.NET而言原型模式抽象类Prototype是用不着的在.NET中System命名空间中提供了ICloneable接口其中就是唯一的一个方法Clone(),这样我们只需要实现这个接口就可以完成原型模式了。     下面看大话设计模式中的简历的原型实现代码结构图     简历类 Codepublic class Resume : ICloneable    {        private string name;        private string sex;        private string age;        private string timeArea;        private string company;        public Resume(string name)        {            this.name  name;        }        //设置个人信息        public void SetPersonalInfo(string sex, string age)        {            this.sex  sex;            this.age  age;        }        //设置工作经历        public void SetWorkExperience(string timeArea, string company)        {            this.timeArea  timeArea;            this.company  company;        }        //显示        public void Display()        {            Console.WriteLine({0} {1} {2}, name, sex, age);            Console.WriteLine(工作经历{0} {1}, timeArea, company);        }        public Object Clone()        {            return (Object)this.MemberwiseClone();        }}     客户端调用 Codestatic void Main(string[] args){    Resume a  new Resume(大鸟);    a.SetPersonalInfo(男, 29);    a.SetWorkExperience(1998-2000, XX公司);    Resume b  (Resume)a.Clone();    b.SetWorkExperience(1998-2006, YY企业);    Resume c  (Resume)a.Clone();    c.SetPersonalInfo(男, 24);    a.Display();    b.Display();    c.Display();    Console.Read();}     结果显示    大鸟男 29    工作经历 1998-2000 XX公司    大鸟 29    工作经历 1998-2006 YY公司    大鸟男 24    工作经历 1998-2000 XX公司     一般在初始化的信息不发生变化的情况下克隆是最好的方法。这既隐藏了对象的创建细节又对性能是大大的提高。     下面我们来看深克隆和浅克隆:    在上面的简历类中数据都是string型的而string是一种拥有值类型特点的特殊引用类型MemberwiseClone()方法对于值类型的字段执行逐位复制对于引用类型则只复制引用的对象因此原对象及其副本引用同一个对象。我们看下面的引用类型的简历克隆的代码实现     代码结构图     详细代码     工作经历类Code//工作经历    public class WorkExperience    {        private string workDate;        public string WorkDate        {            get { return workDate; }            set { workDate  value; }        }        private string company;        public string Company        {            get { return company; }            set { company  value; }        }    }     简历类Code//简历    public class Resume : ICloneable    {        private string name;        private string sex;        private string age;        private WorkExperience work;        public Resume(string name)        {            this.name  name;            work  new WorkExperience();        }        //设置个人信息        public void SetPersonalInfo(string sex, string age)        {            this.sex  sex;            this.age  age;        }        //设置工作经历        public void SetWorkExperience(string workDate, string company)        {            work.WorkDate  workDate;            work.Company  company;        }        //显示        public void Display()        {            Console.WriteLine({0} {1} {2}, name, sex, age);            Console.WriteLine(工作经历{0} {1}, work.WorkDate, work.Company);        }        public Object Clone()        {            return (Object)this.MemberwiseClone();        }    }     客户端      static void Main(string[] args)        {            Resume a  new Resume(大鸟);            a.SetPersonalInfo(男, 29);            a.SetWorkExperience(1998-2000, XX公司);            Resume b  (Resume)a.Clone();            b.SetWorkExperience(1998-2006, YY企业);            Resume c  (Resume)a.Clone();            c.SetPersonalInfo(男, 24);            c.SetWorkExperience(1998-2003, ZZ企业);            a.Display();            b.Display();            c.Display();            Console.Read();        }      下面我们看运行结果     大鸟男 29    工作经历 1998-2003 ZZ企业     大鸟 29       工作经历 1998-2003 ZZ企业     大鸟男 24       工作经历 1998-2003 ZZ企业    由于MemberwiseClone()方法是浅表复制克隆对于值类型克隆没有问题对于引用类型对象只复制了引用对引用的对象还是指向了原来的对象所以就会出现我给a、b、c三个引用设置‘工作经历’但却同时看到三个引用都是最后一次设置因为三个引用都指向了同一个对象。     “浅复制”被复制对象的所有变量都含有与原来的对象相同的值而所有的对其他对象的引用都仍然指向原来的对象。     “深复制”深复制把引用对象的变量指向复制过的对象而不是原有的被引用的对象。     下面来看深复制的实现      代码结构图     实现代码     工作经验类    //工作经历    public class WorkExperience : ICloneable    {        private string workDate;        public string WorkDate        {            get { return workDate; }            set { workDate  value; }        }        private string company;        public string Company        {            get { return company; }            set { company  value; }        }        public Object Clone()        {            return (Object)this.MemberwiseClone();        }    }     简历类 Code //简历    public class Resume : ICloneable    {        private string name;        private string sex;        private string age;        private WorkExperience work;        public Resume(string name)        {            this.name  name;            work  new WorkExperience();        }        private Resume(WorkExperience work)        {            this.work  (WorkExperience)work.Clone();        }        //设置个人信息        public void SetPersonalInfo(string sex, string age)        {            this.sex  sex;            this.age  age;        }        //设置工作经历        public void SetWorkExperience(string workDate, string company)        {            work.WorkDate  workDate;            work.Company  company;        }        //显示        public void Display()        {            Console.WriteLine({0} {1} {2}, name, sex, age);            Console.WriteLine(工作经历{0} {1}, work.WorkDate, work.Company);        }        public Object Clone()        {            Resume obj  new Resume(this.work);            obj.name  this.name;            obj.sex  this.sex;            obj.age  this.age;            return obj;        }    }     客户端代码与上面相同执行结果     大鸟男 29     工作经历 1998-2000 XX公司    大鸟 29     工作经历 1998-2006 YY企业     大鸟男 24     工作经历 1998-2003 ZZ企业    3 总结     优缺点     使用原型模式有以下优点     1。在运行时增加或删除产品只要通过客户端注册原型实例即可将新产品类型增加到系统中例如组态软件中工具箱中的每个工具可以对应一个注册的原型对象可以通过增加原型对象扩展工具箱。     2。很容易的创建复杂的对象在图像编辑和组态等软件中经常需要创建复杂的图元这些图元是由简单的图元组成的采用原型模式可以很容易的将复杂图元作为一般图元来使用是软件的工具箱具有扩展功能。     3。减少工厂的层次由于在.NET中可以使用反射工厂因此这个优势并不明显。     使用原型模式的缺点是在有些情况下克隆功能不容易实现特别是在遇到对象的循环引用时。     在.NET中的很多类支持原型模式例如我们希望获得一个与现有数据集DataSet结构相同的数据集既可以采用克隆的方法。注意DataSet有Clone()和Copy()两个方法Clone()方法用来复制DataSet的结构但不复制DataSet的数据实现了原型模式的浅复制Copy()方法不但复制结构也复制数据实现了原型模式的深复制。 转载于:https://www.cnblogs.com/peida/archive/2008/06/26/1230129.html
http://www.zqtcl.cn/news/858234/

相关文章:

  • 站点推广策略包括黄山旅游必去十大景点
  • 佛山龙江做网站的信宜做网站
  • 推广自己的网站需要怎么做wordpress 正计时
  • 做网站工资怎么样织梦的官方网站
  • python制作视频网站开发互动网站建设公司
  • 网站软文代写广西网站设计公司排行榜
  • c2c网站代表和网址mirages WordPress
  • 网站建设开发案例教程wordpress中国区官方论坛
  • 王晴儿网站建设做啊录音网站
  • 网站开发版本号正规的企业网站建设公司
  • 中国做网站正邦温州网站建设方案服务
  • 南通网站关键词优化wordpress做小程序
  • 上海企业网站seo多少钱做网站图片链接到天猫
  • 属于教育主管部门建设的专题资源网站是广西壮锦网站建设策划书
  • 云南网站制作一条龙网站建设公司对比分析报告
  • 手机网站客户端网站语言有几种
  • 做网站怎么选取关键词中企动力销售陪酒多吗
  • 新网站做内链雅虎网站收录提交入口
  • 简述建设一个网站的具体过程接做名片的网站
  • 怎样建立自己网站网站产品数据如何恢复
  • 用wordpress建立电商网站用Off做网站
  • 网站建设公司不赚钱ui设计软件培训学校
  • 网站项目策划书模板wordpress修改模版
  • 房地产手机网站模板电脑建立网站
  • 网站自适应手机代码网络服务机构的网站
  • 系统网站重庆智能建站模板
  • wordpress适合优化吗宝塔 wordpress优化
  • 怎么利用网站做外链接怎样做公司网站介绍
  • 广州网站优化渠道木门网站模板
  • 手机网站菜单设计wordpress加联系方式