Java设计模式之原型设计示例详解

 更新时间:2022年04月06日 17:06:12   作者:Thinkao~  
这篇文章主要为大家详细介绍了Java的原型设计模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

简单说一下(定义)

什么是原型模式:原型模式是用于创建重复的对象,同时又能保证性能。用一个已经创建的实例作为原型,通过复制该原型对象来创建一个或者多个和原型相同或者相似的新对象

举例说明:我们都玩过打飞机的游戏,敌军的飞机可谓是数不胜数,但是如果每出一架敌机都要重新实例化的话,那么自然我们的功能很复杂。所以这个时候我们的原型模式就派上用场了,只实例化一架飞机出来,其他的照着他复制就可以啦

稍微夸一下(优缺点)

原型模式优点:

1.当创建新的对象实例比较复杂时,使用原型模式通过一个已有实例可以提高新实例创建效率
2.可以动态增加或者减少产品类
3.原型模式提供了简单的创建结构
4.可以使用深克隆的方式保存对象的状态

原型模式缺点:
1.对已有类进行改造时,必须修改其源码,违背了开闭原则
2.在实现深克隆时需要编写较为复杂的代码

顺便提一下(适用场景)

原型模式的适用场景:
1.对象种类繁多,无法将他们整合到一个类的时候
2.难以根据类生成实例时
3.想解耦框架与生成的实例时

着重讲一下(深、浅克隆)

在原型模式中有两个概念需要讲下,就是深克隆与浅克隆。顾名思义浅克隆只是复制了基础属性(如八大基本类型),然而引用类型实际上没有复制,只是将对应的引用给复制了(复制地址)。
 

浅克隆:如果原型对象的成员变量是值类型(如八大基本类型),那么就是直接复制;如果是复杂的类型,就只是复制对应的内存地址。(网上当个图)
换言之,就是复杂类型的成员变量(String,枚举等)用的是一个,修改了克隆对象的原型对象也会,他们是共用的(类似于响应式)。而值类型不是共用的。

在这里插入图片描述

深克隆:深克隆就是什么都是单独的,全部复制,复制之后的全部各自独立。修改克隆对象对于原型对象没有任何影响(浅克隆中修改克隆对象,原型对象跟着变)。

在这里插入图片描述

多多用一下(结构、代码实现)

模式结构

原型模式主要包含三个部分:具体原型类、抽象原型类、访问类
具体原型类:实现抽象原型类的clone()方法,是可被复制的对象
抽象原型类:规定了具体原型对象必须实现的接口
访问类:使用具体原型类中的clone()方法类复制新的对象
一图走天下:

在这里插入图片描述

代码实现

1.创建具体原型类RealizeType.java

public class RealizeType implements Cloneable {
    RealizeType(){
        System.out.println("原型创建成功");
    }
    public Object clone() throws CloneNotSupportedException {
        System.out.println("具体原型复制成功");
        return super.clone();
    }
}

2.原型模式测试类PrototypeTest.java

public class PrototypeTest {
    public static void main(String[] args) throws CloneNotSupportedException {
        RealizeType obj = new RealizeType();
        RealizeType obj1 = (RealizeType) obj.clone();
        System.out.println("obj==obj1?"+(obj==obj1));
    }
}

3.运行结果

原型创建成功
具体原型复制成功
obj==obj1?false

以上就是Java设计模式之原型设计示例详解的详细内容,更多关于Java原型设计模式的资料请关注脚本之家其它相关文章!

相关文章

  • Redis缓存策略超详细讲解

    Redis缓存策略超详细讲解

    实际开发中缓存处理是必须的,不可能我们每次客户端去请求一次服务器,服务器每次都要去数据库中进行查找,为什么要使用缓存?说到底是为了提高系统的运行速度
    2022-09-09
  • java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性代码示例

    java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性代码示例

    在Java开发中我们处理JSON数据时经常会遇到空值(null)的情况,这篇文章主要给大家介绍了关于java后端返回数据给前端时去除值为空或NULL的属性、忽略某些属性的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • spring-boot 多线程并发定时任务的解决方案

    spring-boot 多线程并发定时任务的解决方案

    这篇文章主要介绍了spring-boot 多线程并发定时任务的解决方案,需要的朋友可以参考下
    2019-08-08
  • SpringBoot server.port配置原理详解

    SpringBoot server.port配置原理详解

    这篇文章主要介绍了Spring Boot server.port配置原理详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 详解如何在SpringBoot中使用WebMvc

    详解如何在SpringBoot中使用WebMvc

    Spring Boot 是一个快速、简单的开发框架,在 Spring Boot 中,我们可以使用 WebMvc 来构建 Web 应用程序,所以本文就来讲讲如何在SpringBoot中使用WebMvc吧
    2023-06-06
  • java实现文件上传功能

    java实现文件上传功能

    这篇文章主要为大家详细介绍了java实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • MyBatis-Plus的物理删除和逻辑删除(使用场景)

    MyBatis-Plus的物理删除和逻辑删除(使用场景)

    数据库中的数据删除会分为两种:物理删除 和 逻辑删除,接下来通过本文给大家介绍MyBatis-Plus的物理删除和逻辑删除使用场景分析,感兴趣的朋友一起看看吧
    2021-09-09
  • SpringBoot 配合 SpringSecurity 实现自动登录功能的代码

    SpringBoot 配合 SpringSecurity 实现自动登录功能的代码

    这篇文章主要介绍了SpringBoot 配合 SpringSecurity 实现自动登录功能的代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • java程序员必会的远程debug教程

    java程序员必会的远程debug教程

    这篇文章主要为大家介绍了java程序员必会的远程debug教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java JVM字节码指令集总结整理与介绍

    Java JVM字节码指令集总结整理与介绍

    本节将会着重介绍一下JVM中的指令集、Java是如何跨平台的、JVM指令集参考手册等内容。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论