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

2024-04-27 12:28

本文主要是介绍Java设计模式 _创建型模式_原型模式(Cloneable),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、原型模式

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

2、实现思路:
(1)、需要克隆的实体类实现Cloneable接口
(2)、复写clone方法(当前对象本身可以不复写,如果当前对象被继承,需要clone子类,则必须要复写)

二、代码示例

1、基础示例:

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、继承示例:

// 花抽象类
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";}@Overridepublic String desc() {return "牡丹花";}
}// 梅花类
public class Plum extends Flower {public Plum(){this.name = "plum";}@Overridepublic 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方法时,抽象父类中必须重写,否则无法调用。

学海无涯苦作舟!!!

这篇关于Java设计模式 _创建型模式_原型模式(Cloneable)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940503

相关文章

设计模式——迭代器模式(Iterator)

迭代器模式(Iterator Pattern)是一种行为设计模式,它使得我们能够顺序地访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式为遍历不同的聚合结构提供了一个统一的接口,使得客户端代码可以独立于聚合对象的变化。 迭代器模式结构 迭代器模式主要由以下几个角色组成: 迭代器(Iterator):定义访问和遍历元素的接口。具体迭代器(Concrete Iterator

go设计模式之建造者设计模式

建造者设计模式 建造者模式也叫生成器模式。 生成器模式是一种创建型设计模式, 目标是将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示。 案例 igloo­Builder冰屋生成器与 normal­Builder普通房屋生成器可建造不同类型房屋, 即 igloo冰屋和 normal­House普通房屋 。 每种房屋类型的建造步骤都是相同的。 主管 (可选) 结构体可对建造过

Java 断言的作用

Java 断言的作用         在 Java 编程语言中,断言(Assertion)是一种用于在程序运行期间检查和验证某个条件是否满足的机制。断言机制可以在代码中插入断言语句,并在代码执行过程中对这些语句进行验证。当断言失败时,程序会抛出一个 AssertionError 异常,并终止执行。 为什么需要断言?         断言机制的主要目的是在开发和测试阶段对代码进行调试和验证

js-引擎模板前台后台(java)实战

前台: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello MUI</title> <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no"> <meta name="app

2.外卖点餐系统(Java项目 springboot)

目录 0.系统的受众说明 1.系统功能设计 2.系统结构设计 3.数据库设计 3.1实体ER图 3.2数据表 4.系统实现 4.1用户功能模块 4.2管理员功能模块 4.3商家功能模块 4.4用户前台功能模块 4.5骑手功能模块 5.相关说明  新鲜运行起来的项目:如需要源码+数据库+部署视频+运行环境 0.系统的受众说明      1 在校学习的学生,可用

JavaEE 多线程详细讲解(2)

1.线程不安全分析 (1)线程不安全的主要原因就是,系统的抢占式执行,对于内核设计者来说,这是非常方便的一个执行方式,但是这却却导致线程不安全的问题,也有不抢占执行的系统,但是这种系统会导致你的系统性能不是特别好。 (2)多个线程执行操作一个对象不会发生线程不安全的情况 (3)String之所以设置成无法改变,也是为了线程安全,如果想改可以试一试反射  (4)为了更好的解决线程不安全问

java io包

InputStream InputStream 是 Java I/O 中所有输入流的抽象基类,它定义了读取字节流的基本方法。InputStream 类提供了许多子类,用于从不同的数据源读取数据,如文件、网络连接、内存等。 InputStream 提供了以下常用的方法: int read(): 从输入流中读取下一个字节的数据。如果已经到达流的末尾,则返回 -1。int read(byte[

必学-设计模式

设计模式的分类 创建型模式(Creational):关注对象的实例化过程,包括了如何实例化对象、隐藏对象的创建细节等。常见的创建型模式有单例模式、工厂模式、抽象工厂模式等。 结构型模式(Structural):关注对象之间的组合方式,以达到构建更大结构的目标。这些模式帮助你定义对象之间的关系,从而实现更大的结构。常见的结构型模式有适配器模式、装饰器模式、代理模式等。 行为型模式(Behavior

Java找不到包解决方案

在跟着教程写Spingboot后端项目时,为了加快效率,有时候有的实体文件可以直接粘贴到目录中,此时运行项目会出现Java找不到包的情况,即无法找到导入的实体文件,这是项目没有更新的原因。解决方法:         刷新Maven:         点击如下循环,即刷新Maven的包。之后便可以更新之前导入的包。

javascript一些常用转换方法

1、容量单位转换 function bytesToSize(bytes) {if (bytes === 0) return '0 B';var k = 1000, // or 1024sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],i = Math.floor(Math.log(bytes) / Math.log(k))