三、原型模式

原型模式用于创建重复对象的同时保持性能,该模式属于创建型设计模式,是创建对象的最佳实现方式。

  • 为什么要使用原型模式?

    • 提高性能:通过new的方式创建对象不能获取到对象运行时的状态,且new复制给新对象并没有直接clone的性能高。
    • 逃避构造函数:原型模式生成的新对象可能是派生类。拷贝构造函数生成的新对象只能是它本身。
  • 何时使用原型模式?

    • 对象之间相同或相似,即只有个别几个属性不同的时候
    • 对象的创建过程比较麻烦,但复制比较简单的时候
    • 资源优化场景,在实际项目中,原型模式很少单独出现,一般和工厂方法模式一起出现,通过clone的方式创建一个对象,然后由工厂方法提供给调用者

具体原型类:实现抽象原型类的clone()方法,它是可被复制的对象

原型模式实践

  • 优点
    • 简化对象的创建,提高性能,它可直接操作内存中的二进制流,特别是复制大对象,性能差别非常明显
  • 缺点
    • 实现原型模式的每个派生类都必须实现Clone接口

代码实现

package prototype;

import java.io.Serializable;


public class Person implements Serializable , Cloneable{

    private String name;


    public Person(String name) {
        this.name = name;
    }

    public Person() {
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }

    @Override
    public Person clone() {
        try {
            // TODO: copy mutable state here, so the clone can't change the internals of the original
            return (Person) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }
}
package prototype;

public class Client {


    public static void main(String[] args) {
        Person person = new Person("person1");
        Person person1 = person.clone();

        System.err.println("person == person1?" + (person == person1));

        System.err.println(person1);
    }
}
// 结果
person == person1false
Person{name='person1'}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容