java: Prototype Pattern
/** * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * 原始模型 Prototype Patterns * 历史版本: JDK 14.02 * 2022-09-12 创建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口类 * 2022-09-12 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc PandaToClone.java * * */ package com.javapatterns.prototype; import java.lang.Object.*; public class PandaToClone implements Cloneable { private int height, weight, age; public PandaToClone (int height, int weight) { this.age = 0; this.weight = weight; this.height = height; } public void setAge(int age) { this.age = age; } public int getAge() { return age; } public int getHeight() { return height; } public int getWeight() { return weight; } public Object clone() { PandaToClone temp = new PandaToClone(height, weight); temp.setAge(age); return (Object) temp; } }
调用测试:
//原始模型 thisPanda = new PandaToClone(15, 25); thisPanda.setAge(3); // Create the second object by cloning the first thatPanda = (PandaToClone) thisPanda.clone(); // Now describe these objects on the system console : System.out.println(" Age of this panda : " + thisPanda.getAge()); System.out.println(" height : " + thisPanda.getHeight()); System.out.println(" weight : " + thisPanda.getWeight()); System.out.println(" Age of that panda : " + thatPanda.getAge()); System.out.println(" height : " + thatPanda.getHeight()); System.out.println(" weight : " + thatPanda.getWeight());
输出:
Age of this panda : 3 height : 15 weight : 25 Age of that panda : 3 height : 15 weight : 25
/** * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * 原始模型 Prototype Patterns * 历史版本: JDK 14.02 * 2022-09-12 创建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口类 * 2022-09-12 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc Monkey.java * * */ package com.javapatterns.prototype; import java.util.Date; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.io.IOException; import java.io.OptionalDataException; import java.io.Serializable; /** * 大圣,猢狲 * * */ public class Monkey implements Cloneable, Serializable{ private int height; private int weight; private GoldRingedStaff staff; private Date birthDate; /** * 构造 * */ public Monkey() { this.birthDate = new Date(); this.staff = new GoldRingedStaff(); } /** *深克隆方法 * * */ public Object deepClone() throws IOException, OptionalDataException, ClassNotFoundException { //write to stream ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(this); //read from stream ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); return (oi.readObject()); } /** * 浅克隆方法 * */ public Object clone() { Monkey temp = null; try { temp = (Monkey) super.clone(); } catch(CloneNotSupportedException e) { System.out.println("Clone failed"); } finally { return temp; } } /** * * */ public int getHeight() { return height; } /** * * */ public void setHeight(int height) { this.height = height; } /** * * */ public int getWeight() { return weight; } /** * * */ public void setWeight(int weight) { this.weight = weight; } /** * * */ public Date getBirthDate() { return birthDate; } /** * * */ public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } /** *金箍棒的取值方法 * */ public GoldRingedStaff getStaff() { return staff; } }
/** * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * 原始模型 Prototype Patterns * 历史版本: JDK 14.02 * 2022-09-12 创建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口类 * 2022-09-12 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc GoldRingedStaff.java * * */ package com.javapatterns.prototype; import java.util.Date; import java.io.Serializable; /** * 金箍棒 * * */ public class GoldRingedStaff implements Cloneable, Serializable{ private float height = 100.0F; private float diameter = 10.0F; /** * * */ public GoldRingedStaff() { //write your code here } /** * * */ public void grow() { this.diameter *= 2.0; this.height *= 2; } /** * * */ public void shrink() { this.diameter /= 2; this.height /= 2; } /** * * */ public void move() { //write your code for moving the staff } /** * * */ public float getHeight() { return height; } /** * * */ public void setHeight(float height) { this.height = height; } /** * * */ public float getDiameter() { return diameter; } /** * * */ public void setDiameter(float diameter) { this.diameter = diameter; } }
/** * 版权所有 2022 涂聚文有限公司 * 许可信息查看: * 描述: * 原始模型 Prototype Patterns * 历史版本: JDK 14.02 * 2022-09-12 创建者 geovindu * 2022-09-12 添加 Lambda * 2022-09-12 修改:date * 接口类 * 2022-09-12 修改者:Geovin Du * 生成API帮助文档的指令: *javadoc - -encoding Utf-8 -d apidoc TheGreatestSage.java * * */ package com.javapatterns.prototype; import java.util.Date; import java.io.IOException; import java.lang.ClassNotFoundException; /** * 大圣 * */ public class TheGreatestSage { private Monkey monkey = new Monkey(); public TheGreatestSage() { } /** * * * */ public void change() throws IOException, ClassNotFoundException { try { Monkey copyMonkey; for (int i = 0; i < 2000; i++) { } copyMonkey = (Monkey) monkey.deepClone(); System.out.println("Monkey King's birth date=" + monkey.getBirthDate()); System.out.println("Copy monkey's birth date=" + copyMonkey.getBirthDate()); System.out.println("Monkey King == Copy Monkey? " + (monkey == copyMonkey)); System.out.println("Monkey King's Staff == Copy Monkey's Staff? " + (monkey.getStaff() == copyMonkey.getStaff())); } catch (ClassNotFoundException cex) { cex.printStackTrace(); } catch(IOException ioException) { ioException.printStackTrace(); } } }
调用测试:
try { TheGreatestSage theGreatestSage=new TheGreatestSage(); theGreatestSage.change(); } catch (Exception exception) { exception.printStackTrace(); }
输出:
Monkey King's birth date=Fri Sep 16 22:08:46 CST 2022 Copy monkey's birth date=Fri Sep 16 22:08:46 CST 2022 Monkey King == Copy Monkey? false Monkey King's Staff == Copy Monkey's Staff? false
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)