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

做旅游网站一年能挣多少新品发布会活动方案

做旅游网站一年能挣多少,新品发布会活动方案,镇江网站推广优化,系统优化的方法目录 定义 类图 角色 优缺点 优点 缺点 应用场景 案例展示 浅克隆 深克隆 定义 原型模式旨在创建重复的对象,同时确保良好的性能表现。它通过复制现有对象(原型)来创建新对象,而非使用传统的构造函数创建方式。这种设计…

目录

定义

类图

角色

优缺点

优点

缺点

应用场景

案例展示

浅克隆

深克隆


定义

        原型模式旨在创建重复的对象,同时确保良好的性能表现。它通过复制现有对象(原型)来创建新对象,而非使用传统的构造函数创建方式。这种设计模式属于创建型模式,为对象创建提供了一条便捷、高效的途径。其核心在于,通过复制原型对象的属性和状态,极大地减少了新对象创建过程中的资源消耗和时间成本。

类图

角色

  1. 原型(Prototype):声明一个克隆自身的接口,这是所有支持克隆操作的类的通用接口。它为具体原型类定义了克隆方法的规范,使得具体原型类只需实现该接口,就能实现对象的克隆。​

  2. 具体原型(Concrete Prototype):实现原型接口,定义克隆方法。在克隆方法中,具体原型类会创建一个与自身属性和状态相同的新对象,并返回该对象。

优缺点

优点

  • 性能优势:Java 自带的原型模式基于内存二进制流的复制,相比直接使用new关键字创建对象,能显著提升性能。在创建复杂对象时,new操作需要经历类的加载、初始化等一系列过程,而原型模式通过复制内存中的对象,避免了这些繁琐的步骤,大幅缩短了对象创建的时间。​

  • 状态保存与恢复:借助深克隆,原型模式可以完整地保存对象的状态。这一特性在实现撤销操作或恢复对象历史状态时极为有用。通过克隆并保存对象的特定状态,程序能够在需要时轻松恢复到之前的状态,简化了状态管理的复杂度。

缺点

  • 违背开闭原则:由于clone方法位于类的内部,对已有类进行改造以支持原型模式时,需要修改类的代码。这与开闭原则相悖,可能导致代码的可维护性降低,尤其是在大型项目中,牵一发而动全身,增加了系统的维护成本。​

  • 深克隆实现复杂:在实现深克隆时,需要编写复杂的代码。当对象之间存在多重嵌套引用时,为了确保所有层次的对象都能被正确克隆,每个层次的对象对应的类都必须支持深克隆,这无疑增加了实现的难度和复杂性。

应用场景

  • 对象相似性高:当系统中需要创建多个相似对象,仅个别属性不同时,原型模式是理想的选择。以游戏开发为例,游戏中的角色通常具有相似的基本属性和行为,使用原型模式可以通过克隆一个基础角色,然后修改特定属性,快速创建多个不同的角色实例。​

  • 创建成本高昂:在创建对象成本较大的情况下,如初始化时间长、占用大量 CPU 资源或网络资源,原型模式可以优化资源使用。比如,创建一个需要从数据库加载大量数据并进行复杂计算的对象,通过克隆已有的对象,可以避免重复的加载和计算过程,提高系统的响应速度。​

  • 数据准备繁琐:当创建对象需要繁琐的数据准备或特定的访问权限时,原型模式可以简化对象的创建过程,提高性能和安全性。例如,创建一个需要经过多层权限验证和复杂数据配置的对象,通过克隆已有的合法对象,可以减少不必要的验证和配置步骤。​

  • 大量对象需重新赋值:在系统中大量使用某类对象,且每个调用者都需要为其属性重新赋值的场景下,原型模式可以通过克隆对象,快速满足不同调用者的需求,减少重复创建对象的开销。

案例展示

浅克隆

  • 浅克隆是使用默认的 clone()方法来实现

  • 基本数据类型的成员变量,浅克隆会直接进行值传递(复制属性值给新对象)

  • 引用数据类型的成员变量,浅克隆会进行引用传递(复制引用值(内存地址)给新对象)

  • 在原先Sheep 类基础上实现 Cloneable 接口,重写 clone 方法。


public class Sheep implements Cloneable{private String name;private int age;@Overrideprotected Object clone()  {//克隆该实例,使用默认的clone方法来完成Sheep sheep = null;try {sheep = (Sheep)super.clone();} catch (Exception e) {System.out.println(e.getMessage());}return sheep;}public Sheep(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Sheep{" +"name='" + name + '\'' +", age=" + age +'}';}
}

深克隆

  • 方法1:

    • 引用对象也实现 Cloneable 接口

    • 对象调用引用对象的clone 方法

  • 方法2:

    • 实现序列化接口,不必实现Cloneable 接口了


public class Sheep implements Serializable { //实现序列化接口private String name;private int age;public Cow friend;public Sheep(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Sheep{" +"name='" + name + '\'' +", age=" + age +'}';}public Object deepClone() { //深拷贝//创建流对象ByteArrayOutputStream bos = null;ObjectOutputStream oos = null;ByteArrayInputStream bis = null;ObjectInputStream ois = null;try {//序列化bos = new ByteArrayOutputStream();oos = new ObjectOutputStream(bos);oos.writeObject(this); //当前这个对象以对象流的方式输出//反序列化bis = new ByteArrayInputStream(bos.toByteArray());ois = new ObjectInputStream(bis);Sheep sheep = (Sheep) ois.readObject();return sheep;} catch (Exception e) {e.printStackTrace();return null;} finally {//关闭流try {bos.close();oos.close();bis.close();ois.close();} catch (Exception e2) {System.out.println(e2.getMessage());}}}
}

http://www.dtcms.com/a/530909.html

相关文章:

  • 网站单页支付宝支付怎么做的网站建设 400电话 广告语
  • 通过输入域名访问自己做的网站怎么样自己建立一个网站
  • 海外网站购物平台有哪些做网站怎么学
  • 惠城网站设计秦皇岛网站群发关键词
  • 企业网站建设管理及推广2345网址导航应用
  • 网站顶一下代码wordpress内容页自定义字段
  • 信通网站开发中心上海闵行邮编
  • 佛山建设工程信息网站网站404页面在哪查看
  • 科技设计网站整合营销是什么
  • 深圳网站制作电话wordpress博客占用cpu
  • 网站后台怎么上传文章企业网站建设遵循的原则
  • 环保网站建设项目备案系统网站建设售后回访话术
  • 做网站的需要注册商标吗合肥网络科技有限公司做网站
  • 陶瓷行业网站建设招标书上饶营销网站建设
  • 以下不属于网站建设优化山东天齐建设集团网站
  • 哈尔滨造价信息网官网seo外包方案
  • 赤水网站建设网站页面优化分析
  • 有哪些h5做的网站wordpress所有分类
  • 写代码建商城网站时间建筑模板的规格
  • 郑州网站seo诊断网站建设文章
  • 网站被k长沙seo关键词排名
  • 电脑编程与网站建设免费logo设计一键生成无水印图片
  • 如何做网站免费重庆网站建设网领科技
  • 简单大气的企业网站错题网站开发
  • 珠海 网站开发怎么查自己是不是备案人员
  • 儋州网站建设培训学校广告设计在线
  • 创建网站需要备案吗文本文档做网站怎么加图片
  • 西安seo代运营佛山网络推广seo
  • 商城网站模板源码网站备案更改需要多久
  • php在网站上怎么做充值做外汇查哪个网站