原型模式-CV大法

2021-08-03  本文已影响0人  一个好汉
原型模式

原型模式

原型模式的理解

原型模式,简单的理解就是CTRL C CTRL V
文艺点那叫照猫画虎
让我们简简单单的复制一个对象吧
直接创建对象的代价比较大时,则采用这种模式

联系实际生活中的例子:

  1. 复制一个文件成为副本
  2. 生物克隆
  3. 3D打印(扫描原物 打印与之对应的物体)

Java中原型模式

Java 原生支持原型模式

创建关键点:

  1. 实现接口 Cloneable
  2. 重写方法 clone()

来人 上代码

Good:
Bad:
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不会再调用构造器
 * 复制之后的对象是另外的对象跟原来的对象不是同一个
 *///:~
上一篇 下一篇

猜你喜欢

热点阅读