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方法时,抽象父类中必须重写,否则无法调用。

学海无涯苦作舟!!!

相关推荐
Damon小智2 小时前
鸿蒙元服务深度实践:跨端唤醒与状态共享的设计模式
华为·设计模式·harmonyos
shaominjin1232 小时前
单例模式:设计模式中的“独一无二“之道
android·单例模式·设计模式
欠你一个bug6 小时前
Java设计模式应用--装饰器模式
java·设计模式·装饰器模式
LoveXming12 小时前
Chapter14—中介者模式
c++·microsoft·设计模式·中介者模式·开闭原则
崎岖Qiu14 小时前
【设计模式笔记06】:单一职责原则
java·笔记·设计模式·单一职责原则
Yeniden14 小时前
【设计模式】适配器模式大白话讲解!
设计模式·适配器模式
金色熊族18 小时前
装饰器模式(c++版)
开发语言·c++·设计模式·装饰器模式
西红柿维生素20 小时前
23种设计模式-框架中的使用
java·开发语言·设计模式
数据知道21 小时前
Go语言设计模式:桥接模式详解
设计模式·golang·桥接模式
数据知道1 天前
Go语言设计模式:原型模式详解
设计模式·golang·原型模式