zoukankan      html  css  js  c++  java
  • 设计模式-原型模式

    原型模式

    定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    Java 中的 Object 类提供了浅克隆的 clone() 方法,他执行得是浅拷贝,也就是说如果是引用类型得对象,只是会拷贝引用。

    使用场景:

    • 初始化很花时间,很废资源的时候,通过原型拷贝可以避免这些消耗
    • 通过new一个对象需要非常繁琐的数据准备或访问权限,可以使用原型模式
    • 一个对象在提供给其他对象使用,其他对象可能修改其值时,可以通过原型模式拷贝一个对象提供给他,保护原对象

    原型模式的克隆分为浅克隆和深克隆。

    • 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
    • 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

    优点:

    • 虚拟机直接复制内存块执行,速度比使用new快
    • 可以基于原型,快速得创建一个对象,而无需知道细节
    • 可以运行时动态得获取对象的类型和状态,从而创建一个对象。

    缺点:

    • 实现深拷贝比较困难,代码量会增大很多

    代码示例:

    public class Prototype implements Cloneable {
    
        public Prototype() throws InterruptedException {
            System.out.println("构建Prototype对象");
            Thread.sleep(3000);
            System.out.println("构建Prototype对象完成");
        }
    
        @Override
        public Prototype clone() throws CloneNotSupportedException {
            return (Prototype) super.clone();
        }
    }
    
     public static void main(String[] args) throws InterruptedException, CloneNotSupportedException {
            Prototype prototype=new Prototype();
            System.out.println(prototype);
            Prototype clone = prototype.clone();
            System.out.println(clone);
        }
    
    书山有路勤为径,学海无涯苦作舟
  • 相关阅读:
    Java.util.Timer的灵活配置与使用
    js字符变量判空
    js获取当前时间格式化字符串
    Java快速获取格式化的日期字符串
    img标签显示图片方法总结
    Java获取给定日期的月初和月末两个日期
    SpringBoot学习--07配置Druid数据库连接池
    SpringBoot学习--06使用jackson返回json数据
    SpringBoot学习--05SpringBoot整合Mybatis(下)(mybatis中踩过的坑)--不定时更新
    SpringBoot学习--04SpringBoot整合Mybatis(上)(配置mybatis generator)
  • 原文地址:https://www.cnblogs.com/javammc/p/14939591.html
Copyright © 2011-2022 走看看