原型模式
原型模式的理解
原型模式,简单的理解就是CTRL C CTRL V
文艺点那叫照猫画虎
让我们简简单单的复制一个对象吧
直接创建对象的代价比较大时,则采用这种模式
联系实际生活中的例子:
- 复制一个文件成为副本
- 生物克隆
- 3D打印(扫描原物 打印与之对应的物体)
Java中原型模式
Java 原生支持原型模式
创建关键点:
- 实现接口 Cloneable
- 重写方法 clone()
来人 上代码
Good:
- 复制对象更简单了 不用自己使用get set方法慢慢设置
Bad:
- 必须实现Cloneable接口 不然会报错
Class Diagram
3D打印-类图Code:
这是一个实现Cloneable的产品
public class Product implements Cloneable {
private int length;
private int width;
private int height;
private String material;
public Product() {
super();
System.err.println("创建了一个产品");
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public String getMaterial() {
return material;
}
public void setMaterial(String material) {
this.material = material;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
3D打印机
//:
public class Machine {
public static void main(String[] args) {
Product product = new Product();
product.setLength(5);
product.setWidth(4);
product.setHeight(6);
// metal 金属 material 材料
product.setMaterial("metal");
try {
Product copy = (Product) product.clone();
String result = String.format("copy之后得到的对象的属性值为:长度--%s,宽度--%s,高度--%s,材料--%s。", copy.getLength(), copy.getWidth(), copy.getHeight(), copy.getMaterial());
System.out.println(result);
System.out.println("复制之后是否相等:" + (product == copy ? "相等" : "不相等"));
} catch (CloneNotSupportedException e) {
System.out.println("克隆发生异常");
e.printStackTrace();
}
}
}
/* result-->
*创建了一个产品
*copy之后得到的对象的属性值为:长度--5,宽度--4,高度--6,材料--metal。
*复制之后是否相等:不相等
* 结果分析 :String也可以得到克隆 原来String也属于浅克隆的 一部分呀
* copy不会再调用构造器
* 复制之后的对象是另外的对象跟原来的对象不是同一个
*///:~
网友评论