原型模式

原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。属于创建型模式的一种,提供了一种创建对象的最佳方式。

这种模式是实现了一个原型接口

实践

可以将深拷贝换成浅拷贝看下结果
个人理解:原型模式就是一种优雅的拷贝实现方式

Video.java

package com.example.designPattern23.prototype;

import java.util.Date;

import lombok.Data;

@Data
public class Video implements Cloneable {
    private String id;
    private Date date;

    public Video() {
    }

//    // 浅拷贝
//    @Override
//    protected Object clone() throws CloneNotSupportedException {
//        return super.clone();
//    }

    // 深拷贝
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Object o = super.clone();
        Video v = (Video) o;
        v.date = (Date) date.clone();

        return v;
    }

    public Video(String id, Date date) {
        this.id = id;
        this.date = date;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public String toString() {
        return "Video{" +
                "id='" + id + '\'' +
                ", date=" + date +
                '}';
    }
}

调用Bilibili.java

package com.example.designPattern23.prototype;

import java.util.Date;


public class Bilibili {
    public static void main(String[] args) throws CloneNotSupportedException, InterruptedException {
        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(1213144);
        System.out.println("v1:" + v1);
        System.out.println("v2:" + v2);
    }
}

posted @ 2022-05-07 09:00  Oh,mydream!  阅读(25)  评论(0编辑  收藏  举报