• 设计模式之原型模式


    应用场景

    先来说一下原型模式的应用场景

    • 创建新对象成本较大,如初始化需要占用较长的时间,占用太多的CPU资源或网络资源。在这种情况下,可以通过原型模式对已有对象进行复制来获得新对象,如果是相似对象,可以对其成员变量稍作修改。
    • 在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过 clone 的方法创建一个对象,然后由工厂方法提供给调用者。

    实现步骤

    1. 实体类要实现一个Cloneable的接口
    2. 重写clone方法
    3. 在client类中创建原型对象
      这是一个奖状类,通过学生的
    package com.设计模式.原型模式.demo;
    
    /**
     * Created with IntelliJ IDEA.
     *
     * @Author: Coderfine
     * @Date: 2023/10/08/19:03
     * @Description:这是一个三好学生的奖状类
     */
    public class Citation implements Cloneable{
    
        //三号学生的姓名
        public String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public Citation clone() throws CloneNotSupportedException {
            return (Citation) super.clone();
        }
        public void show(){
            System.out.println(name+"同学......................");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    测试类

    package com.设计模式.原型模式.demo;
    
    /**
     * Created with IntelliJ IDEA.
     *
     * @Author: Coderfine
     * @Date: 2023/10/08/19:05
     * @Description:使用场景,创建对象比较复杂的话可以使用原型对象来进行克隆
     */
    /*
        这是一个String类型的演示
     */
    public class Test {
        public static void main(String[] args) throws CloneNotSupportedException {
            //创建原型对象
            Citation citation = new Citation();
    
            //克隆奖状对象
            Citation clone = citation.clone();
    
            citation.setName("alibaba");
            clone.setName("范小勤");
    
            clone.show();
            citation.show();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    就好像有一个模板,让后自己把业务的逻辑往里面放

    深克隆和浅克隆

    • 浅克隆:创建一个对象,新对象的属性和原来的对象的属性完全相同,对于非基本类型属性,仍指向原有属性所指的对象的内存地址
    • 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原来对象的地址。

    深克隆实际就是把文件直接复制一份,浅克隆就是建立一个快捷方式,对象的clone是一种深克隆

  • 相关阅读:
    Java SE 11 新增特性
    《TCP/IP网络编程》阅读笔记--多线程服务器端的实现
    HTML5期末大作业:简单的学生网页作业源码 基于html企业官网项目的设计与实现【艺术官网】
    Linux常用命令——bmodinfo命令
    ECCV2022 | 人大提出轻量级基于注意力的特征融合机制,在多个公开数据集上有效!代码已开源!
    ​计算机的原码, 反码和补码​
    Kafka 面试题
    【前端】webpack5常用loader和plugin
    基于python+django的求职招聘管理系统源码+开发文档
    第4章:向量处理机
  • 原文地址:https://blog.csdn.net/giaogege666/article/details/133689278