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

建设vip网站相关视频下载江苏免费关键词排名外包

建设vip网站相关视频下载,江苏免费关键词排名外包,在哪里建网站比较好,帝国网站管理系统教程一、为何需要原型模式#xff08;Prototype Pattern#xff09;? 在软件设计中#xff0c;我们会遇到到这样的情况#xff1a;对原对象进行拷贝一个新的副本。想要实现这样的逻辑#xff0c;有一种笨方法就是对原对象里的所有变量进行逐一赋值。但是这样的做法会导致代码…一、为何需要原型模式Prototype Pattern? 在软件设计中我们会遇到到这样的情况对原对象进行拷贝一个新的副本。想要实现这样的逻辑有一种笨方法就是对原对象里的所有变量进行逐一赋值。但是这样的做法会导致代码臃肿逻辑复杂还可能会有遗漏某些变量没有被赋值的问题。 为了解决这个在代码中对每一个变量进行赋值的问题同时又保证能够实现拷贝的功能于是原型模式就出来了。 定义 用一个已经创建的实例作为原型来创建一个与原型对象相同的新对象 【角色】 抽象原型类 规定具体原型对象必须实现的clone()方法实现原型类 实现抽象原型类的clone()方法。 原型模式分为浅克隆和深克隆 浅克隆浅拷贝创建一个新的对象新对象的属性和原型对象的完全相同。对对象里的引用类型成员仍指向原来所指向的内存地址。这里属性指的是值类型。同下 深克隆深拷贝创建一个新对象对对象里的属性和引用类型成员都会被克隆引用类型成员不再指向原来的地址。 应用条件 对象里有非常多成员尤其该对象的引用类型成员里还有其他的引用类型对象。 二、例子 需求 假设有一盏灯A然后另一盏灯B根据A灯的样子造出来的。可以说这两盏灯外观一摸一样。在黑暗中要想实现一个能有照明系统的用途这两盏灯还需要连接一块电池才能发光照明。 假定电池为引用类型成员A灯和B灯属于值类型成员。 A灯电池 原对象。 B灯 电池 新对象。 现有两种情况可以选择 1情况浅拷贝为了节约电池的成本把这两盏灯都连接在同一块电池。 2情况深拷贝为了这两盏灯要完全分开互不影响一盏灯连接一块电池所以需要两块容量一致的电池。 Serializable 序列化只对深拷贝有作用。系统遍历原对象里所有引用类型成员进行逐一克隆无需代码来处理具体的过程。被标记为 Serializable 的类才能够使用深拷贝机制否则程序运行会崩溃。 //引用类型电池类[Serializable]public class Battery{public int Capacity;}//灯的原型抽象类[Serializable]public abstract class LampPrototype{public abstract int Use();public abstract LampPrototype ShallowClone();//浅拷贝public abstract LampPrototype DeepClone();//深拷贝}//灯的实现类[Serializable]public class Lamp : LampPrototype{//引用类型电池public Battery battery new Battery();public override int Use(){return battery.Capacity;}//浅拷贝public override LampPrototype ShallowClone(){return (Lamp)this.MemberwiseClone();}//深拷贝public override LampPrototype DeepClone(){MemoryStream stream new MemoryStream();BinaryFormatter formatter new BinaryFormatter();formatter.Serialize(stream, this);stream.Position 0;return (Lamp)formatter.Deserialize(stream);}}class Program{//设置原对象的数据public static void setOriginal(LampPrototype lampPro) {var lamp lampPro as Lamp;lamp.battery.Capacity 100;}//设置新对象的数据public static void setNew(LampPrototype lampPro) {var lamp lampPro as Lamp;lamp.battery.Capacity 80;Console.WriteLine(New Capacity:80);}static void Main(string[] args){//原对象LampPrototype Originallamp new Lamp();setOriginal(Originallamp);//浅拷贝Console.WriteLine();Console.WriteLine(After ShallowCopy,Original:);LampPrototype shallowAudio Originallamp.ShallowClone();setNew(shallowAudio);//新对象使用电池原对象的电池容量受到影响Console.WriteLine(Original Capacity: Originallamp.Use());//恢复原对象数据setOriginal(Originallamp);//深拷贝Console.WriteLine();Console.WriteLine(After DeepCopy,Original:);LampPrototype deepAudio Originallamp.DeepClone();setNew(deepAudio);//新对象使用电池原对象的电池容量没有受到影响Console.WriteLine(Original Capacity: Originallamp.Use());Console.ReadLine();}}
http://wiki.neutronadmin.com/news/187717/

相关文章:

  • 企业商城网站建设价格网站备案 图片大小
  • 揭阳商城网站建设建站公司分析
  • 东莞有哪些好的网站建设公司跨境电商服务
  • 潍坊奎文住房和城乡建设局网站wordpress用户名的要求
  • html企业网站系统中信建设有限责任公司深圳中信金融中心项目工期专业招标
  • 公司网站要备案吗注册资金100万的公司要多少钱
  • 福州网站定制公司做网站需要多少
  • 苏州好的做网站的公司泰安房产网签最新情况
  • 西安营销型网站网站建设开放的端口
  • linux 配置网站域名简单网页源代码
  • 竹中建设官方网站wordpress 注册验证码
  • 手机网站快速排名 软件网上做ps赚钱的网站
  • 网站的着陆页做网站和做网页的区别
  • 网站建设往年的高考题查看网站主机
  • 有什么公司建网站如何做微信小程序网站
  • 企业门户网站平台建设招标采购文件网站建设推广群
  • 网站开发与维护项目招标站长工具流量统计
  • 网站空间可以通过什么获取网站的seo
  • 武义做网站广州市网站建设企业
  • 黑龙江恒泰建设集团网站人力外包
  • 2015年全球网站优秀设计师最专业的外贸网站建设公司
  • 做公司网站解析网站开发与设计教程pdf
  • 项目四网站建设内容Python爬取wordpress
  • 上海专业做网站公司电话公司网站建设规划方案
  • 做的网站在ie会乱码成都住建局官网住建蓉e办
  • 网站开发需要申请专利吗娄底网站建设工作室
  • 用帝国cms做网站电脑上无法安装wordpress
  • 深圳市深圳市住房和建设局网站哈尔滨建站哪个好
  • 增长超人做网站多少钱各网站收录
  • 运城市网站建设网站后台的作用