原型模式 prototype

简介: 1 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节 2 实现方式:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
1 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节
2 实现方式: 通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
3 使用情况:很多时候,创建对象的时候,只是在某些属性值上有区别,而大部分都很相似,该类的用户对于该类的对象是怎么创建的,对类的内部结构这些都不关心的情况,但是这样的对象的初始化相对来说比较复杂,      而且需要耗费较长的时间或资源,这种情况下,我们可以考虑使用Prototype模式。
4 原型模式 prototype-(浅度克隆):浅克隆是指克隆一个对象,而该对象的属性只是基本数据类型,只克隆出该对象!
eg:
 1 package com.lovo.prototype.two;
 2 public class Player implements Cloneable {
 3 
 4     private int id;
 5     private String name;
 6     private String skill;
 7 
 8     public int getId() {
 9         return id;
10     }
11     public void setId(int id) {
12         this.id = id;
13     }
14     public String getName() {
15         return name;
16     }
17     public void setName(String name) {
18         this.name = name;
19     }
20     public String getSkill() {
21         return skill;
22     }
23     public void setSkill(String skill) {
24         this.skill = skill;
25     }
26     
27     
28 @Override
29     public String toString() {
30         return "Player [id=" + id + ", name=" + name + ", skill=" + skill + "]";
31     }
32     
33     /**
34      * 浅克隆
35      * @return
36      * @throws CloneNotSupportedException
37      */
38     public Player qianClone() throws CloneNotSupportedException{
39         return (Player) super.clone();
40     }
41     
42     
43     
44     
45 
46 }

 

 1 package com.lovo.prototype.two;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) throws CloneNotSupportedException {
 6         Player p=new Player();
 7         p.setId(1);
 8         p.setName("小明");
 9         p.setSkill("灌篮");
10         
11         Player p2=p.qianClone();
12         
13         System.out.println(p);
14         System.out.println("=============");
15         System.out.println(p2);
16         System.out.println(p==p2);//fasle
17         
18     }
19 
20 }

 

 
5 原型模式 prototype-(深度克隆):深度克隆是指克隆的目标里面还有引用类型,引用类型里还有引用类型,同时把引用类型克隆出来叫深度克隆!
 
 1 package com.lovo.prototype.two;
 2 
 3 import java.io.ByteArrayInputStream;
 4 import java.io.ByteArrayOutputStream;
 5 import java.io.IOException;
 6 import java.io.ObjectInputStream;
 7 import java.io.ObjectOutputStream;
 8 import java.io.Serializable;
 9 import java.util.List;
10 
11 
12 
13 public class Player implements Cloneable,Serializable {
14     private static final long serialVersionUID = 1L;
15     private int id;
16     private String name;
17     private String skill;
18     private List<String> list;
19     
20     public List<String> getList() {
21         return list;
22     }
23     public void setList(List<String> list) {
24         this.list = list;
25     }
26     public int getId() {
27         return id;
28     }
29     public void setId(int id) {
30         this.id = id;
31     }
32     public String getName() {
33         return name;
34     }
35     public void setName(String name) {
36         this.name = name;
37     }
38     public String getSkill() {
39         return skill;
40     }
41     public void setSkill(String skill) {
42         this.skill = skill;
43     }
44     
45     @Override
46     public String toString() {
47         return "Player [id=" + id + ", name=" + name + ", skill=" + skill
48                 + ", list=" + list + "]";
49     }
50     
51     
52     /**
53      * 深克隆
54      * @return
55      * @throws IOException
56      * @throws ClassNotFoundException
57      */
58     public Player deepClone() throws IOException, ClassNotFoundException{
59         ByteArrayOutputStream bos=new ByteArrayOutputStream();
60         ObjectOutputStream oos=new ObjectOutputStream(bos);
61         oos.writeObject(this);
62         
63         ByteArrayInputStream bis=new ByteArrayInputStream(bos.toByteArray());
64         ObjectInputStream ois=new ObjectInputStream(bis);
65         Player p=(Player) ois.readObject();
66         
67         
68         
69         
70         return p;
71         
72     }
73     
74 
75 }

 

 1 package com.lovo.prototype.two;
 2 
 3 import java.io.IOException;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6 
 7 public class Test {
 8 
 9     public static void main(String[] args) throws CloneNotSupportedException, ClassNotFoundException, IOException  {
10         Player p=new Player();
11         p.setId(1);
12         p.setName("小明明");
13         p.setSkill("灌篮");
14         
15         Player p2=p.deepClone();
16         List<String> list=new ArrayList<>();
17         list.add("跑步");
18         list.add("射击");
19         p2.setList(list);
20           
21         
22         System.out.println(p);
23         System.out.println("=============");
24         System.out.println(p2);
25         
26     }
27 
28 }

 

 
相关文章
|
算法 C语言 C++
【ROS】服务通信、话题通信的应用
现在可以直接使用键盘来控制乌龟运动了
299 0
|
关系型数据库 编译器 分布式数据库
《PolarDB for PostgreSQL源码与应用实战》——如何参与贡献PolarDB for PostgreSQL开源(上)
《PolarDB for PostgreSQL源码与应用实战》——如何参与贡献PolarDB for PostgreSQL开源(上)
181 0
|
开发者 Python Windows
文件的读取方式 | 学习笔记
快速学习 文件的读取方式
151 0
文件的读取方式 | 学习笔记
|
机器学习/深度学习 人工智能 虚拟化
机器学习领域技术大图:硬件算力
硬件算力可以说在人工智能三要素中处于发动机的角色,特别是深度学习在最近 10 年之所以获得突飞猛进的发展,很大程度得益于硬件算力在摩尔定律的驱动下获得持续的增长,如 GPU 在最近 10 年的理论算力获得了近几十倍的性能提升。所以,硬件算力也是阿里在人工智能技术领域的重中之重,并进行了重点布局和持续的技术研发投入,我们的技术核心战略是“通过建设核高基领域的研发能力,提供极致性价比的算力供给,奠定阿里云在 IaaS/PaaS 层具备产品易用性、多样性和差异化服务的能力”。 本文将分享当前阿里所有 AI/异构算力的方方面面。
2254 0
机器学习领域技术大图:硬件算力
|
移动开发 C++ Linux
【C/C++学院】(18)QT文件读写/主窗口类/获取host信息
<h1><span style="font-family:'Microsoft YaHei UI','Microsoft YaHei',SimSun,'Segoe UI',Tahoma,Helvetica,sans-serif,'Microsoft YaHei',Georgia,Helvetica,Arial,sans-serif,宋体,PMingLiU,serif; font-size:
2075 0
|
6天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
17天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1320 7
|
5天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
296 129
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话