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

如何介绍自己的网站wordpress分段加载

如何介绍自己的网站,wordpress分段加载,懒人网页编辑器手机版,网络营销的方法文章目录 1.原型模式概述2.浅拷贝与深拷贝2.1.浅拷贝的实现方式2.2.深拷贝的实现方式 3.结语 1.原型模式概述 原型模式是一种非常简单易懂的模型#xff0c;在书上的定义是这样的#xff1a; Specify the kinds of objects to create using a prototypical instance,and cre… 文章目录 1.原型模式概述2.浅拷贝与深拷贝2.1.浅拷贝的实现方式2.2.深拷贝的实现方式 3.结语 1.原型模式概述 原型模式是一种非常简单易懂的模型在书上的定义是这样的 Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype. 用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象。 通俗的讲就是有一个现成的对象我们通过复制或拷贝这个对象的方式来创建一个新的对象这就是原型模式。 那么我们为什么需要通过拷贝来创建对象呢 我认为主要体现在两个维度程序运行效率和开发效率 程序运行效率如果对象的创建和初始化的代价比较大创建比较繁琐例如需要从数据库、RPC、网络等获取一些数据才能完成创建这时候使用原型模式拷贝出一个对象无疑是效率更高的做法。开发效率我们在业务开发中会涉及到不同的分层每个分层都有自己的数据实例例如与前端交互的VO对象数据传输的DTO对象与数据库交互的PO对象等等这些对象转换的过程中大部分的字段值都是相同的如果每一层都使用getter/setter方法来进行赋值开发效率就很容易受到影响尤其是在迭代中增加了新字段的情况下每一层都需要新增一个字段set方法很麻烦也很容易做漏这时候使用原型模式来进行复制就比较方便了。 严格的说原型模式是同一个类型下的不同实例的数据拷贝对于不同类型的实例拷贝更应该归类于原型模式的一种拓展用法。不过在业务中这种拓展用法使用的频率更高接下来的示例也是以这种拓展用法为主。 2.浅拷贝与深拷贝 想要在使用原型模式的时候不出现一些“意外”那就得先了解浅拷贝与深拷贝之间的区别。 两者的区分非常好理解关键点就是在对引用类型的成员变量拷贝上两种拷贝类型有不同的结果 浅拷贝只会将原始对象中的引用类型变量的内存地址复制给目标对象的同名成员变量。深拷贝会以引用类型变量的类型为基础创建一个崭新的对象再把这个新对象的内存地址赋值给目标对象的对应同名成员变量。 对于浅拷贝来说如果原始对象中有其他的引用类型变量在拷贝出目标对象后两个对象对于该引用类型变量的修改会互相影响但是由于不需要针对引用类型的变量查询新的对象这种拷贝方式的效率较高。在不会修改变量值或者只需要修改基本类型的变量值包含String时优先考虑使用浅拷贝。 如果拷贝的对象中包含了引用类型的对象且需要进行修改或者拷贝不同类型但内部字段相同的对象例如UserPO和UserDTO可以考虑使用深拷贝。 2.1.浅拷贝的实现方式 浅拷贝的实现方式有很多归类起来主要是两种一种是使用Java原生的方式另一种是通过开源的工具包实现。 先看看Java原生的方式实现一个Cloneable接口并覆写父类Object中的clone方法 Getter Setter public class User implements Cloneable {private String name;private int age;private Phone phone;Overridepublic User clone() throws CloneNotSupportedException {return (User) super.clone();} }Getter Setter public class Phone {private String phoneNumber; }为了验证浅拷贝这里还加入了一个Phone对象接下来就做个测试。 public static void main(String[] args) throws CloneNotSupportedException {User user new User();user.setName(张三);user.setAge(18);user.setPhone(new Phone());User cloneUser user.clone();System.out.println(user.getPhone() cloneUser.getPhone()); }打上一个断点查看两个对象可以看到User对象已经成功复制并且里面的Phone对象明显是同一个对象 使用开源的工具常用的有两种工具分别是Apache commons中的BeanUtils或PropertyUtilsSpring中的BeanUtils他们都有一个共同的方法是copyProperties用来拷贝对象属性。在实现中虽然Apache和Spring都是通过反射来实现的但是Spring针对反射做了一层缓存在相同类型的对象复制中效率高于Apache所以我们选择使用Spring的拷贝。 没有Spring依赖的话需要引入依赖包 dependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion5.3.9/version /dependency修改一下代码可以得到一样的结果 public static void main(String[] args) {User user new User();user.setName(张三);user.setAge(18);user.setPhone(new Phone());User cloneUser new User();BeanUtils.copyProperties(user, cloneUser);System.out.println(user.getPhone() cloneUser.getPhone()); }2.2.深拷贝的实现方式 深拷贝的实现有两种方式一种是通过递归来拷贝既然一次拷贝对于引用变量来说只能拷贝地址那就再把引用变量也做一次拷贝就可以了只是这种方式太麻烦了。我们一般会选择第二种方式通过序列化与反序列化来完成对象的拷贝。 其实在我们常见的RPC通信中就是使用的这种方式来完成对象拷贝的请求方将对象序列化成流、字节数组、JSON、XML等等方式来做传输接收方收到数据后用同样的方式反序列化成一个新的对象。我们也可以采用这种方式来完成对象的拷贝。 这里使用一个FastJson工具类做了一个简单的封装封装了两个方法拷贝单个对象和拷贝List对象 public class DeepCloneUtil {/*** 克隆单个对象** param source 被克隆的源对象* param targetClazz 克隆目标对象的类型* param T 目标对象泛型* return 克隆模板对象*/public static T T cloneObject(Object source, ClassT targetClazz) {String jsonString JSON.toJSONString(source);return JSON.parseObject(jsonString, targetClazz);}/*** 克隆List对象** param source 被克隆的源对象* param targetClazz 克隆目标对象的类型* param T 目标对象泛型* return 克隆模板对象*/public static T ListT cloneList(List? source, ClassT targetClazz) {String jsonString JSON.toJSONString(source);return JSON.parseArray(jsonString, targetClazz);}}修改一下测试代码 public static void main(String[] args) {User user new User();user.setName(张三);user.setAge(18);user.setPhone(new Phone());User cloneUser DeepCloneUtil.cloneObject(user, User.class);System.out.println(user.getPhone() cloneUser.getPhone()); }此时两个Phone对象就不是同一个对象了这样就完成了深拷贝。 再试试列表拷贝 public static void main(String[] args) {User user new User();user.setName(张三);user.setAge(18);user.setPhone(new Phone());User user1 new User();user1.setName(李四);user1.setAge(19);user1.setPhone(new Phone());ListUser list Arrays.asList(user, user1);ListUser cloneList DeepCloneUtil.cloneList(list, User.class);}可以看到不管是List还是User还是Phone每一个都是不同的对象。 3.结语 本篇主要讲述的是原型模式的概念及其使用并引出了深拷贝与浅拷贝的区别。 不管是从创建对象的性能上考虑还是从开发效率上考虑都可以在合适的时候选择使用原型模式拷贝对象的方式来替代从头开始创建一个新的对象。
http://www.dnsts.com.cn/news/121980.html

相关文章:

  • 网站建站流程有哪些桂林人网
  • 商丘市住房和城乡建设厅网站设计师怎么弄个人网站
  • 梅州建站免费做 爱视频网站
  • 买2g 空间做下载网站中国临海建设规划局网站
  • 手机网站seo免费软件session WordPress
  • 合肥哪家网站公司好thinkphp网站开发实战教程
  • 新公司网站建设分录网络推广运营公司
  • 东莞网站建怎么修改自己公司网站
  • 网站开发学习网站秦皇岛做网站的公司
  • 石墨网站开发用logo做ppt模板下载网站
  • 网站404页面模板天河区发布
  • 重庆品牌型网站建设多少钱com域名续费一年要多少钱
  • 自己做的商业网站在那里发布wordpress设置默认头像
  • 做分类信息网站赚钱吗邹城住房城乡建设部网站
  • 江苏省城乡建设部网站首页网页设计工资多少
  • 免费动画模板素材网站深圳做网站做公司网站的公司
  • 找人做彩票网站多少钱珠海网站建设专业公司
  • 网站兼容手机wordpress标签别名
  • 万网主机网站建设视频一个网站开发流程图
  • 个人备案网站能做商城吗神州网站制作
  • 在线做c 题的网站那些做软件的网站
  • 网页设计网站怎么做唯品会网站建设 分析报告
  • 木门行业做网站有什么好处慈利网站开发
  • 网站建设公司推广广告语网站织梦后台怎么做
  • 给网站建设提意见赶集网站建设多少钱
  • 网站建设管理权限m版网站开发
  • 做调查问卷换赏金的网站wordpress屏蔽插件
  • 诸城建设局网站wordpress磁力插件
  • 网站建设公司薪资做seo要先做网站么
  • 厦门app网站建设电子邮箱注册网站申请