首页 > 其他分享 >【设计模式系列】原型模式(十一)

【设计模式系列】原型模式(十一)

时间:2024-11-03 11:49:10浏览次数:3  
标签:Sheep 十一 name 对象 clone Object 原型 设计模式

一、什么是原型模式

原型模式(Prototype Pattern)是一种创建型设计模式,它使得一个对象可以复制自身,从而创建一个与自己属性一致的新对象,而无需知晓对象创建的细节。这种模式允许动态地增加对象的数量,并通过复制现有的对象来提高效率,特别是当直接创建对象的代价较大时(例如,涉及复杂的初始化过程)。

二、原型模式的角色

  • Prototype(原型角色):这
    • 是一个抽象类或接口,它声明了一个克隆自身的方法(通常是clone)。在Java中,这通常是通过实现Cloneable接口并覆盖Object类的clone方法来实现的。
  • ConcretePrototype(具体原型角色)
    • 这是Prototype角色的具体实现,它实现了克隆方法,以创建自身的副本。

三、角色模式的典型应用

  1. 实现对象池:在需要频繁创建和销毁对象的场景中,如数据库连接池或线程池,原型模式可以用来快速复制对象,减少创建和销毁的开销。

  2. 深拷贝和浅拷贝:原型模式可以实现对象的深拷贝(复制对象及其所有引用的对象)和浅拷贝(仅复制对象本身),这在需要复制对象图时非常有用。

四、原型模式在Object对象中的应用

以下是原型模式在Object对象中的具体应用:

  1. Cloneable接口

    • Cloneable是一个标记接口,没有任何方法,它用来指示一个类的对象是“可克隆”的。当一个类实现了Cloneable接口,它承诺该类的对象可以被克隆。
  2. Object类的clone()方法

    • Object类中的clone()方法是protected的,这意味着只有该类及其子类可以调用此方法。这个方法返回对象的一个副本,但是默认实现只是简单地返回对象的引用,而不是真正的副本。
  3. 实现克隆

    • 要使用clone()方法来复制对象,子类需要实现Cloneable接口,并重写clone()方法,以提供创建对象副本的具体实现。

以下是一个简单的示例,展示了如何在Java中使用Object类的clone()方法来实现原型模式:

// 1. 实现Cloneable接口
public class Sheep implements Cloneable {
    private String name;

    public Sheep(String name) {
        this.name = name;
    }

    // 2. 重写clone()方法
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

// 使用原型模式
public class PrototypeTest {
    public static void main(String[] args) {
        try {
            Sheep original = new Sheep("Original");
            Sheep cloned = (Sheep) original.clone(); // 3. 调用clone()方法
            System.out.println("Original: " + original.getName());
            System.out.println("Cloned: " + cloned.getName());
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,Sheep类实现了Cloneable接口,并重写了Object类的clone()方法,以创建对象的副本。在main方法中,我们创建了一个Sheep对象,并使用clone()方法来复制这个对象。由于clone()方法是protected的,所以它只能在Sheep类或其子类中被调用。

需要注意的是,Object类的clone()方法只能实现浅拷贝,即只复制对象本身和它的所有成员变量,如果成员变量是引用类型,则复制的是引用,而不是引用对象本身。如果需要实现深拷贝,需要在子类中自定义克隆逻辑。

标签:Sheep,十一,name,对象,clone,Object,原型,设计模式
From: https://blog.csdn.net/LHW0621/article/details/143453602

相关文章

  • 银河战舰队——项目原型设计+概要设计
    银河战舰队——项目原型设计+概要设计1.格式要求作业所属课程班级的链接作业要求2024秋软工实践团队作业-第二次(原型设计+概要设计)-作业-软件工程2024-班级博客-博客园作业的目标设计游戏原型和概要设计团队名称银河战舰队团队成员名字-学号102......
  • 2024秋软工实践iman原型设计和UML设计
    信息类别内容作业所属课程软件工程实践-秋季班作业要求第一次团队作业-原型设计与概要设计作业目标根据需求分析和设计,完成项目的原型设计和概要设计,培养团队协作能力,为后续的开发奠定基础。团队名称iman......
  • 福气满满——项目原型设计+概要设计
    博客文档这个作业属于哪个课程https://edu.cnblogs.com/campus/fzu/SE2024作业要求https://edu.cnblogs.com/campus/fzu/SE2024/homework/13297作业的目标完成小福同学的原型设计以及概要设计团队名称福气满满团队成员学号-名字052203132童潇剑,102201226陈......
  • 2024秋软工实践 旺仔水饺队 原型设计和UML设计
    作业所属课程https://edu.cnblogs.com/campus/fzu/SE2024作业要求https://edu.cnblogs.com/campus/fzu/SE2024/homework/13297作业的目标实现项目的原型设计与概要设计团队名称旺仔水饺102201140黎曼102201138黄俊瑶102201127罗永辉102201130郑哲浩......
  • Python基础学习(十一)面向对象编程(进阶)
    代码获取:https://github.com/qingxuly/hsp_python_course完结版:Python基础学习(完结版)面向对象编程(进阶)面向对象编程三大特征面向对象编程有三大特征:封装、继承、多态。面向对象编程—封装封装介绍封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]......
  • 学习python的第十一天
    今天学习了正则有以下思维导图 对于以上内容,有以下笔记,以及关于元字符的图importfunctools#re.findallimportre#a="python12314534564java"#anqi=re.findall("123",a)#(匹配规则,数据)#print(anqi)#re.match是从一开始就开始匹配#print(re.match("python"......
  • 《代码大全》读后感-十一章
    第十一章着重探讨了变量的使用,这看似基础的部分,实则蕴含着无尽的奥秘和重要性。变量作为编程的基本元素之一,其正确的运用直接关系到程序的可读性、可维护性以及性能表现。开篇,书中强调了使用变量的一般事项。它让我明白变量不仅仅是存储数据的容器,更是构建清晰逻辑和高效算法的基......
  • 第三十一讲:为什么还有kill不掉的语句?
    第三十一讲:为什么还有kill不掉的语句?简概依旧是平平无奇的开篇​ 在MySQL中有两个kill命令:​ 一个是killquery+线程id,表示终止这个线程中正在执行的语句;​ 一个是killconnection+线程id,这里connection可缺省,表示断开这个线程的连接,当然如果这个线程有语句正......