Java原型设计模式(Prototype)
public class Professor {
private String address;
private double salary;
public Professor(String address, double salary) {
this.address = address;
this.salary = salary;
}
public void setAddress(String address) {
this.address = address;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Professor [address=" + address + ", salary=" + salary + "]";
}
}
public class Student implements Cloneable {
private String name;
private int age;
private Professor professor;
public Student(String name, int age, Professor professor) {
this.name = name;
this.age = age;
this.professor = professor;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", Professor="
+ professor.toString() + "]";
}
@Override
public Object clone() {
Student student = null;
try {
// 在运行时,Object中的clone识别出你要复制的是哪一个对象,Object中的clone()
// 然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。
student = (Student) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return student;
}
|
public static void main(String[] args) {
Professor professor = new Professor("beijing", 12.0);
Student s1 = new Student("zhangsan", 18, professor);
Student s2 = (Student) s1.clone();
System.out.println(s1);
System.out.println(s2);
System.out.println("**************************************");
s2.name = "lisi";
s2.age = 20;
s2.professor.setAddress("shanghai");
s2.professor.setSalary(230.0);
System.out.println(s1);
System.out.println(s2);
}
}
Student [name=zhangsan, age=18, Professor=Professor [address=beijing, salary=12.0]]
Student [name=zhangsan, age=18, Professor=Professor [address=beijing, salary=12.0]]
**************************************
Student [name=zhangsan, age=18, Professor=Professor [address=shanghai, salary=230.0]]
Student [name=lisi, age=20, Professor=Professor [address=shanghai, salary=230.0]]
|
public class Professor2 implements Cloneable {
private String address;
private double salary;
public Professor2(String address, double salary) {
this.address = address;
this.salary = salary;
}
public void setAddress(String address) {
this.address = address;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Professor2 [address=" + address + ", salary=" + salary + "]";
}
@Override
public Object clone() {
Professor2 o = null;
try {
o = (Professor2) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
}
|
public class Student2 implements Cloneable {
private String name;
private int age;
private Professor2 professor;
public Student2(String name, int age, Professor2 professor) {
this.name = name;
this.age = age;
this.professor = professor;
}
@Override
public String toString() {
return "Student2 [name=" + name + ", age=" + age + ", Professor2="
+ professor.toString() + "]";
}
@Override
public Object clone() {
Student2 o = null;
try {
// 在运行时,Object中的clone识别出你要复制的是哪一个对象,Object中的clone()
// 然后为此对象分配空间,并进行对象的复制,将原始对象的内容一一复制到新对象的存储空间中。
o = (Student2) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
o.professor = (Professor2) professor.clone();
return o;
}
public static void main(String[] args) {
Professor2 professor = new Professor2("beijing", 12.0);
Student2 s1 = new Student2("zhangsan", 18, professor);
Student2 s2 = (Student2) s1.clone();
System.out.println(s1);
System.out.println(s2);
System.out.println("**************************************");
s2.name = "lisi";
s2.age = 20;
s2.professor.setAddress("shanghai");
s2.professor.setSalary(230.0);
System.out.println(s1);
System.out.println(s2);
}
}
Student2 [name=zhangsan, age=18, Professor2=Professor2 [address=beijing, salary=12.0]]
Student2 [name=zhangsan, age=18, Professor2=Professor2 [address=beijing, salary=12.0]]
**************************************
Student2 [name=zhangsan, age=18, Professor2=Professor2 [address=beijing, salary=12.0]]
Student2 [name=lisi, age=20, Professor2=Professor2 [address=shanghai, salary=230.0]]
|
public interface Prototype {
public Prototype clone();
public void setName(String name);
public String getName();
}
<span style="font-size:14px;">public class ConcretePrototypeA implements Prototype {
private String name;
public ConcretePrototypeA() {
}
public ConcretePrototypeA(String name) {
this.name = name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public String getName() {
return this.name;
}
@Override
public Prototype clone() {
ConcretePrototypeA prototype = new ConcretePrototypeA();
prototype.setName(this.name);
return prototype;
}
@Override
public String toString() {
return "ConcretePrototypeA [name=" + name + "]";
}
}</span>
public class TestPrototype {
public static void main(String[] args) {
ConcretePrototypeA prototypeA = new ConcretePrototypeA("jimmy");
ConcretePrototypeA prototypeA2 = (ConcretePrototypeA) prototypeA
.clone();
System.out.println(prototypeA);
System.out.println(prototypeA2);
}
}
ConcretePrototypeA [name=jimmy]
ConcretePrototypeA [name=jimmy]
|
Java原型设计模式(Prototype)相关推荐
- Java原型设计模式
文章目录 克隆羊问题 传统方式解决克隆羊问题 思路图解 代码实现 传统的方式的优缺点 原型模式 基本介绍 原型模式实例代码 原型模式在Spring框架中源码分析 深入讨论原型模式的浅拷贝和深拷贝 浅拷 ...
- Java原型模式(prototype)
prototype模式也就是原型模式,是javaGOF23种设计模式中的一种,我们在学习spring的时候在bean标签的学习中碰到过,所以本文来给大家介绍下原型模式 原型模式 在java中我 ...
- 简历复制功能的Java实现方式,【java原型设计模式】复制简历
package com.design.resume; /** * Description: 简历原型 * All Rights Reserved. * @version 1.0 2017年11月21日 ...
- Java中的原型设计模式
Prototype design pattern is one of the Creational Design pattern, so it provides a mechanism of obje ...
- 初学Java常用设计模式之——原型模式
声明:转载请附上原文链接 提示:标题序号从3开始,是照应不同设计模式笔记发布的顺序而定的,比如,第上一篇文章 初学Java常用设计模式之--工厂模式 序号从2开始. 标题后面之所以加上了解,是因为相对 ...
- java prototype是什么,java设计模式-原型模式(Prototype)
定义 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是原型模式的用意 原型模式的结构 原型模式要求对象实现同一个可 ...
- Java设计模式--原型模式Prototype
原型模式Prototype 原型模式使得用户可以通过复制对象样本来创建新对象.与通过调用构造函数创建对象相比,二者主要区别在于:通过复制创建的新对象一般会包含原始对象的某些状态. 原型模式属于对象的创 ...
- 设计模式---原型模式(Prototype Pattern)
在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...
- 原型模式(ProtoType) - Java里的对象复制
一, 引用的复制和对象复制. 在编程中, 我们有时会用两个引用指向同一个对象. 例如: ArrayList a = new ArrayLIst(); ArrayList b = a; 看起来好像有a, ...
最新文章
- js高程(二)-----继承
- STM32的时钟系统RCC详细整理
- 微软为何痛失移动操作系统?
- Java DB中的Java存储过程
- c# TCP高性能通信
- linux没有interface文件,Linux下interface文件修改
- ThinkPHP的RBAC(基于角色权限控制)详解
- mysql 文章内容_假设mysql数据库里面有个字段存的是文章内容,用什么方式查询出所有文章中包含某个特定词语的数据。...
- html资源文件记载进度条,HTML5矢量实现文件上传进度条
- Django配置文件常用信息
- nginx 文件服务器 文件类型,如何配置Nginx限制文件类型?
- 点击链接跳转到微信扫码二维码添加微信好友
- 软著申请全流程图文解析与注意事项
- 首金奥运健儿杨倩,获得金牌和奖金缴纳个税吗?雅戈尔赠送她一套房,交税吗?
- order by排序出现问题
- “原时法师”的开发流程记录和总结
- 服务器心跳信号,服务器心跳线设置
- 汇编语言(王爽)实验十
- 阿里云机器学习平台PAI+AI开源项目测评来啦
- Harris-Laplace角点检测初探+python实现