Java设计模式——原型模式

13 篇文章 0 订阅
4 篇文章 0 订阅

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。
以某个对象为原型进行克隆再进行加工修改。
创建复杂对象时,提高效率。

优点:

  1. 性能提高。
  2. 逃避构造函数的约束。

缺点:

  1. 配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。

使用场景:

  1. 类初始化非常复杂,需要大量资源。
  2. 一个对象多个修改者的场景。
  3. 原型模式很少单独使用,一般是和工厂模式一起使用,通过 clone 的方法创建一个对象,然后由工厂方法提供给调用者。clone替代了new。

实例:Spring 框架中 Bean 的创建,使用了单例模式、原型模式。

实现步骤

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

浅拷贝or深拷贝

浅拷贝中属性中引用对象为同一个。
深拷贝时,将应用对象也进行克隆。
在这里插入图片描述

代码

Video.java

public class Video implements Cloneable {
    private String name;
    private Date creatTime;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Object obj = super.clone();
        // 深克隆
        Video v = (Video) obj;
        // 将对象属性进行克隆
        v.creatTime = (Date) this.creatTime.clone();
        return obj;
    }
    // get&set方法略
}

Copy.java

public class Copy {
    public static void main(String[] args) throws CloneNotSupportedException {
        // 原型对象 v1
        Date date = new Date();
        Video v1 = new Video("java", date);
        Video v2 = (Video) v1.clone();

        System.out.println("v1=>" + v1);
        System.out.println("v2=>" + v2);
        System.out.println("===================================================");
        date.setTime(9999);
        System.out.println("v1=>" + v1);
        System.out.println("v2=>" + v2);
    }
}

结果如下图:
在这里插入图片描述

狂神视频笔记
https://www.bilibili.com/video/BV1Nk4y1R7a3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值