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

重庆网站建设网页广告调词平台多少钱

重庆网站建设,网页广告调词平台多少钱,cnzz网站代做,seo网站推广如何做Java 设计模式:原型模式详解 原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而无需依赖其具体类。这种模式特别适合创建复杂对象或需要频繁创建相似对象的场景。本文将详细介绍原…

Java 设计模式:原型模式详解

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而无需依赖其具体类。这种模式特别适合创建复杂对象或需要频繁创建相似对象的场景。本文将详细介绍原型模式的定义、实现方式及其在 Java 中的应用。

1. 什么是原型模式?

原型模式的核心思想是:通过克隆已有对象(原型)来生成新对象,而不是通过构造函数重新创建。它利用对象的复制机制,提高创建效率,并支持动态扩展。

模式结构

  • 抽象原型(Prototype):定义克隆自身的接口,通常是一个抽象类或接口。
  • 具体原型(Concrete Prototype):实现克隆方法,生成对象的副本。
  • 客户端(Client):使用原型对象,通过克隆创建新实例。

2. 原型模式的实现方式

Java 中,原型模式通常通过实现 Cloneable 接口并重写 clone() 方法来实现。以下是一个简单的示例:复制一个简历对象。

2.1 定义原型接口

Java 提供了内置的 Cloneable 接口,我们直接使用它:

public interface Cloneable {// 标记接口,无方法
}

2.2 实现具体原型

定义一个 Resume 类,表示简历,支持浅克隆和深克隆。

浅克隆实现
public class Resume implements Cloneable {private String name;private int age;private String company; // 工作经历public Resume(String name, int age, String company) {this.name = name;this.age = age;this.company = company;}//  setters and getterspublic void setName(String name) { this.name = name; }public void setAge(int age) { this.age = age; }public void setCompany(String company) { this.company = company; }public String getName() { return name; }public int getAge() { return age; }public String getCompany() { return company; }@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone(); // 浅克隆}@Overridepublic String toString() {return "Resume{name='" + name + "', age=" + age + ", company='" + company + "'}";}
}
深克隆实现

如果对象包含引用类型(如对象或集合),需要实现深克隆以避免共享引用:

public class Resume implements Cloneable {private String name;private int age;private WorkExperience workExperience; // 复杂对象public Resume(String name, int age, WorkExperience workExperience) {this.name = name;this.age = age;this.workExperience = workExperience;}// setters and getterspublic void setName(String name) { this.name = name; }public void setAge(int age) { this.age = age; }public void setWorkExperience(WorkExperience workExperience) { this.workExperience = workExperience; }public WorkExperience getWorkExperience() { return workExperience; }@Overrideprotected Object clone() throws CloneNotSupportedException {// 深克隆Resume cloned = (Resume) super.clone();cloned.workExperience = (WorkExperience) workExperience.clone(); // 克隆引用对象return cloned;}@Overridepublic String toString() {return "Resume{name='" + name + "', age=" + age + ", workExperience=" + workExperience + "}";}
}// 工作经历类,也需实现 Cloneable
public class WorkExperience implements Cloneable {private String company;private String duration;public WorkExperience(String company, String duration) {this.company = company;this.duration = duration;}public void setCompany(String company) { this.company = company; }public void setDuration(String duration) { this.duration = duration; }@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}@Overridepublic String toString() {return "WorkExperience{company='" + company + "', duration='" + duration + "'}";}
}

2.3 客户端使用

浅克隆测试
public class Client {public static void main(String[] args) throws CloneNotSupportedException {Resume resume1 = new Resume("张三", 25, "公司A");Resume resume2 = (Resume) resume1.clone();// 修改副本resume2.setCompany("公司B");System.out.println("原始对象: " + resume1);System.out.println("克隆对象: " + resume2);}
}

输出结果

原始对象: Resume{name='张三', age=25, company='公司A'}
克隆对象: Resume{name='张三', age=25, company='公司B'}
深克隆测试
public class Client {public static void main(String[] args) throws CloneNotSupportedException {WorkExperience work = new WorkExperience("公司A", "2020-2022");Resume resume1 = new Resume("张三", 25, work);Resume resume2 = (Resume) resume1.clone();// 修改副本的引用对象resume2.getWorkExperience().setCompany("公司B");System.out.println("原始对象: " + resume1);System.out.println("克隆对象: " + resume2);}
}

输出结果

原始对象: Resume{name='张三', age=25, workExperience=WorkExperience{company='公司A', duration='2020-2022'}}
克隆对象: Resume{name='张三', age=25, workExperience=WorkExperience{company='公司B', duration='2020-2022'}}

3. 浅克隆与深克隆的区别

  • 浅克隆:仅复制对象的基本类型字段,引用类型字段仍指向原对象。
  • 深克隆:递归复制所有字段,包括引用类型,确保新对象完全独立。

4. 原型模式的优缺点

优点

  1. 高效创建:避免复杂的构造过程,直接复制对象。
  2. 动态扩展:运行时通过克隆创建新实例,灵活性高。
  3. 简化创建:适用于初始化成本高的对象。

缺点

  1. 实现复杂:深克隆需要处理所有引用类型,代码量增加。
  2. 克隆限制:依赖 Cloneable 接口,可能不适用于所有类。

5. 实际应用场景

  • Java 中的 Object.clone():Java 提供的基础克隆机制。
  • 对象池:如线程池或连接池,通过克隆重用对象。
  • 配置复制:复制复杂的配置对象并稍作修改。

示例:Java 中的 ArrayList

ArrayList<String> list1 = new ArrayList<>(Arrays.asList("A", "B"));
ArrayList<String> list2 = (ArrayList<String>) list1.clone();
list2.add("C");
System.out.println(list1); // [A, B]
System.out.println(list2); // [A, B, C]

6. 总结

原型模式通过对象的复制机制,提供了一种高效创建相似对象的方式。浅克隆适用于简单对象,深克隆则适合复杂对象结构。在 Java 中,借助 Cloneable 接口和 clone() 方法,可以轻松实现原型模式。掌握这一模式,能在对象创建成本高或需要动态复制的场景中发挥重要作用。

希望这篇博文能帮助你理解原型模式的精髓!如果有其他设计模式相关问题,欢迎留言讨论。

http://www.cadmedia.cn/news/3956.html

相关文章:

  • 阳江网站涟源网站seo
  • 安徽省招标投标信息网官方网站应用商店aso
  • 免费英文建设网站培训心得简短50字
  • 做电子外贸网站合肥网站优化
  • 企业做一个app多少钱西安seo网站关键词优化
  • 诚通凯胜生态建设有限公司网站上海做网站优化
  • 北京网站制作人才精准客源引流平台
  • 长宁区公司网站建设seo资讯推推蛙
  • 如何创建一个网络平台网站设计优化
  • 按城市亭湖建设局网站南宁百度seo建议
  • 给卖假性药的做网站一般要判多久网站建设公司是怎么找客户
  • wordpress自动生成页面插件站内优化
  • 公司官方网站制作软件外包公司排行榜
  • 站群搭建百度指数有三个功能模块
  • 电商网站建设需求分析书专业竞价托管哪家好
  • b2b网址名称泉州百度seo公司
  • 网站视频下载脚本第三方网站流量统计
  • 携程网网站规划建设特点网站推广优化怎么做最好
  • 岱山建设网站黄页88
  • 海口网站开发找千素网重庆seo排名软件
  • 嘉兴网站建设嘉兴baidu百度网盘
  • 成都市成华区建设局官方网站百度旧版本下载
  • 17网一起做网店宁波seo网页怎么优化
  • 什么网站做h5做得好游戏推广赚佣金
  • 怎么建立一个小说网站网站内部优化有哪些内容
  • 资讯类网站建设资质要求凡科建站代理
  • 京山网站设计公司正规排名网站推广公司
  • 承德企业网站建设公司58同城推广
  • wordpress定时功能免费培训seo网站
  • 上海网站建设webmeng网站怎样优化关键词好