Java设计模式 _创建型模式_原型模式(Cloneable)

一、原型模式

1、原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能比较好。一般对付出较大代价获取到的实体对象进行克隆操作,可以提升性能。

2、实现思路:

(1)、需要克隆的实体类实现Cloneable接口

(2)、复写clone方法(当前对象本身可以不复写,如果当前对象被继承,需要clone子类,则必须要复写)

二、代码示例

1、基础示例:

java 复制代码
import lombok.Data;
@Data
public class Rose implements Cloneable {
    private String name;

    public static void main(String[] args) throws CloneNotSupportedException {
        Rose rose = new Rose();
        rose.setName("玫瑰");
        System.out.println(rose);

        Rose clone = (Rose)rose.clone();
        System.out.println(clone);
		
		System.out.println(rose==clone);
    }
}

上运行结果:

可以看出,完整的复制了属性,且并不是同一个对象。实现了Cloneable接口的类可以直接用clone方法。

2、继承示例:

java 复制代码
// 花抽象类
import lombok.Data;
@Data
public  abstract class Flower implements Cloneable{
    protected String name;
    public abstract String desc();

    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}
// 牡丹花类
public class Peony extends Flower {
    public Peony(){
        this.name = "peony";
    }
    @Override
    public String desc() {
        return "牡丹花";
    }
}

// 梅花类
public class Plum extends Flower {
    public Plum(){
       this.name = "plum";
    }
    @Override
    public String desc() {
        return "梅花";
    }
}
// 测试类
public class Ztest {
    public static void main(String[] args) {
        Flower plum = new Plum();
        System.out.println(plum);

        Flower clone = (Flower) plum.clone();
        System.out.println(clone);
        System.out.println(plum==clone);
    }
}

运行结果:

可以看到运行结果,可以看到完成克隆,且并非同一个对象。子类在调用clone方法时,抽象父类中必须重写,否则无法调用。

学海无涯苦作舟!!!

相关推荐
码农秋2 小时前
设计模式系列(10):结构型模式 - 桥接模式(Bridge)
设计模式·桥接模式
GodKeyNet2 小时前
设计模式-桥接模式
java·设计模式·桥接模式
N_NAN_N8 小时前
类图+案例+代码详解:软件设计模式----原型模式
java·设计模式·原型模式
缘来是庄8 小时前
设计模式之组合模式
java·设计模式·组合模式
DKPT8 小时前
Java组合模式实现方式与测试方法
java·笔记·学习·设计模式·组合模式
鼠鼠我呀29 小时前
【设计模式09】组合模式
设计模式·组合模式
N_NAN_N11 小时前
类图+案例+代码详解:软件设计模式----单例模式
java·单例模式·设计模式
尤物程序猿11 小时前
设计模式之代理模式--数据库查询代理和调用日志记录
设计模式·代理模式
GodKeyNet21 小时前
设计模式-模板模式
设计模式·模板模式
缘来是庄1 天前
设计模式之建造者模式
java·设计模式·建造者模式