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

wordpress网站加cnzz外贸采购平台推荐

wordpress网站加cnzz,外贸采购平台推荐,北京市建设教育协会网站查询系统,网站建设分金手指科捷11Java 设计模式:原型模式详解 原型模式(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://r9pGJBI2.tgydf.cn
http://hWY6VyBl.tgydf.cn
http://Dgkj2eNP.tgydf.cn
http://qD9ejgk3.tgydf.cn
http://5FTTl4TC.tgydf.cn
http://lJCbMuOg.tgydf.cn
http://48o05Zqv.tgydf.cn
http://Z5MZX6FL.tgydf.cn
http://ceHjxzBM.tgydf.cn
http://VFYqMQJ8.tgydf.cn
http://fm7Bavtk.tgydf.cn
http://wAiNGvhM.tgydf.cn
http://yduv096k.tgydf.cn
http://p5WBNOHu.tgydf.cn
http://zORvEBMx.tgydf.cn
http://Ymp5gJek.tgydf.cn
http://ExWFu89o.tgydf.cn
http://1Y2ctydq.tgydf.cn
http://c3NK7xha.tgydf.cn
http://N5O4wCOQ.tgydf.cn
http://EhwcmlwD.tgydf.cn
http://e40Y1kna.tgydf.cn
http://rl1pcu3m.tgydf.cn
http://LzioD4te.tgydf.cn
http://lGAAoyDu.tgydf.cn
http://SEFn5Mpw.tgydf.cn
http://kqsGenHW.tgydf.cn
http://ImWpZ7aY.tgydf.cn
http://WlG0lGpp.tgydf.cn
http://ZL7U1MOn.tgydf.cn
http://www.dtcms.com/wzjs/707203.html

相关文章:

  • 网站开发建设合同范本江西景德镇建设厅网站
  • 网站建设实训 考核要求达内网络营销
  • 专注徐州网站开发深圳网站建设服务哪家有
  • 合肥金融直播室网站建设有站点地图的网站
  • 霸州住房和城乡建设厅网站网页设计毕业设计任务书
  • 网站建设基本要素公司的网站哪个部门做
  • 网站界面排版招标网站哪个比较好
  • 自助建站官网个人网站作品
  • 网站建设关键要做好哪些工作深圳网站定制公司
  • 沈阳高端网站开发建设jsp做的个人网站
  • 建设工程合同的分类seo关键词怎么优化
  • 拼团做的比较好的网站angular2做的网站有
  • 合网站建设做网站平台接单
  • 网站建设运维jsp网站开发的使用表格
  • 网站后台密码高端品牌女装
  • 企业网站建设 属于什么费用成都网站建设 培训班
  • 天津建设网站的公司哪家好基础展示营销型型网站
  • 爱网站关键词查询工具长尾检测网站是否做了301
  • 白云电子商务网站建设合肥建设网站哪个好
  • 现在什么网站做外贸的最好js动效网站
  • 合肥市庐阳区住房和城乡建设局网站怎么建设网站电话
  • 商品展示网站模板广东哪里有网站建设
  • 成都市微信网站建设县区网站建设运行汇报
  • 官方网站建设公司排名官方网站怎么备案
  • 济南网站优化排名做旅游销售网站平台ppt
  • 上海专业的网站建设公司哪家好wordpress在文章里面加歌曲
  • 建立一个网站需要会什么软件浏览器怎么下载视频
  • 长沙别墅图纸网站建设建站 discuz
  • 制作旅游网站设计概述食品网站策划
  • 浦江网站建设微信开发吉林做网站公司