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

学海无涯苦作舟!!!

相关推荐
ghost1436 小时前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
敲代码的 蜡笔小新10 小时前
【行为型之迭代器模式】游戏开发实战——Unity高效集合遍历与场景管理的架构精髓
unity·设计模式·c#·迭代器模式
敲代码的 蜡笔小新1 天前
【行为型之命令模式】游戏开发实战——Unity可撤销系统与高级输入管理的架构秘钥
unity·设计模式·架构·命令模式
m0_555762901 天前
D-Pointer(Pimpl)设计模式(指向实现的指针)
设计模式
小Mie不吃饭1 天前
【23种设计模式】分类结构有哪些?
java·设计模式·设计规范
君鼎2 天前
C++设计模式——单例模式
c++·单例模式·设计模式
敲代码的 蜡笔小新2 天前
【行为型之中介者模式】游戏开发实战——Unity复杂系统协调与通信架构的核心秘诀
unity·设计模式·c#·中介者模式
令狐前生2 天前
设计模式学习整理
学习·设计模式
敲代码的 蜡笔小新2 天前
【行为型之解释器模式】游戏开发实战——Unity动态公式解析与脚本系统的架构奥秘
unity·设计模式·游戏引擎·解释器模式
JANYI20182 天前
嵌入式设计模式基础--C语言的继承封装与多态
java·c语言·设计模式