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

学海无涯苦作舟!!!

相关推荐
ximu_polaris11 小时前
设计模式(C++)-行为型模式-模版方法模式
c++·设计模式
A-Jie-Y12 小时前
JAVA设计模式-抽象工厂模式
java·设计模式
故事还在继续吗12 小时前
设计模式完全指南
设计模式
薛定谔的悦13 小时前
共享数据总线(DPR)设计模式——嵌入式系统的“内存数据库”
jvm·数据库·设计模式
A-Jie-Y14 小时前
JAVA设计模式-建造者模式
java·设计模式
无敌秋16 小时前
# C++ 工厂方法模式实战指南
开发语言·c++·设计模式
a里啊里啊16 小时前
软考-软件评测师:知识点整理(七)——软件工程
设计模式·软件工程·软考·uml·结构化开发·软件评测师·软件模型
ximu_polaris17 小时前
设计模式(C++)-行为型模式-策略模式
c++·设计模式·策略模式
geovindu18 小时前
go: Observer Pattern
开发语言·观察者模式·设计模式·golang
z小天才b2 天前
Java 设计模式完全指南:从入门到精通
java·开发语言·设计模式