原型模式(Prototype)

xiaohai 2021-12-30 15:17:53 2177人围观 标签: 设计模式 
简介用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。

模型定义

用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。

用这种方式创建对象非常高效,根本无须知道对象创建的细节。

模型优缺点

  • 优点
    • 复制对象比创建对象快,提升了性能
  • 缺点
    • 主要注意对象的深复制还是浅复制

适用场景

  • 对象之间相同或相似
  • 对象的创建过程比较麻烦,但复制比较简单的时候

模型结构

  • 抽象原型类:规定了具体原型对象必须实现的接口;
  • 具体原型类:实现抽象原型类的clone()方法,它是可被复制的对象
  • 访问类:使用具体原型类中的clone()方法来复制新的对象

模型实现

由于Java提供了对象的clone()方法,所以用Java实现原型模式很简单,原型模式的克隆分为浅克隆和深克隆Java中的Object类提供了浅克隆的clone()方法,具体原型类只要实现 Cloneable接口就可实现对象的浅克隆,这里的Cloneable接口就是抽象原型类。

package com.company.prototype;

public class PrototypePattern {
    public static void main(String[] args) {
        ConcreteClass class1 = new ConcreteClass();
        try {
            ConcreteClass class2 = (ConcreteClass) class1.clone();
            System.out.println(class1 == class2);
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

class ConcreteClass implements Cloneable {

    public ConcreteClass() {
        System.out.println("构造方法");
    }

    public Object clone() throws CloneNotSupportedException {
        System.out.println("执行clone");
        return (ConcreteClass) super.clone();
    }
}

运行结果:

构造方法
执行clone
false