前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的原型设计模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始

在这里插入图片描述

原型模式概念

原型模式(Prototype Pattern)是23种设计模式之一,它的主要作用是用于创建重复的对象,同时又能保证性能。通过克隆一个现有对象来生成新的对象,而不是使用 new 运算符创建。

实现原理
原型模式的实现原理非常简单,首先需要一个可以被克隆的原型对象,然后通过调用该原型对象的克隆方法,从而得到一个新的对象。

在 Java 中,Object 类提供了一个 clone() 方法,该方法可以将一个对象复制一份,但需要实现 Cloneable 接口,否则会抛出 CloneNotSupportedException 异常。

原型模式优缺点

接下来介绍下原型模式的优缺点

优点:

可以通过克隆现有的对象来创建新的对象,避免了对象的重复创建,提高了系统性能。 可以动态的添加或修改原型对象的属性,可以扩展性好。

缺点:

必须实现 Cloneable 接口,并重写 clone() 方法,这在某些情况下可能会影响到其他接口的实现。
对象中包含的所有成员变量都必须支持 clone() 方法,否则无法进行克隆。 克隆是浅拷贝,如果需要深拷贝需要额外处理。

适用场景
希望避免重复创建相似对象,同时又希望保证性能。
希望动态的扩展对象的属性,同时又希望保证代码的简洁性。

原型模式案例

下面通过一个案例来一起来学习原型模式,详细代码片段如下:

// 定义一个可克隆对象接口
interface Cloneable {
    public Object clone();
}

// 定义一个具体可克隆对象类
class ConcretePrototype implements Cloneable {
    private String name;
    
    public ConcretePrototype(String name) {
        this.name = name;
    }
    
    // 实现克隆方法,返回新的对象副本
    public Object clone() {
        return new ConcretePrototype(this.name);
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }
}

// 客户端调用
public class Client {
    public static void main(String[] args) {
        // 创建原型对象
        ConcretePrototype prototype = new ConcretePrototype("origin");
        
        // 复制一个新对象
        ConcretePrototype clone = (ConcretePrototype)prototype.clone();
        
        // 修改克隆对象的属性
        clone.setName("clone");
        
        // 输出结果
        System.out.println(prototype.getName());  // 输出 "origin"
        System.out.println(clone.getName());  // 输出 "clone"
    }
}

在上面的示例中,我们首先定义了一个可克隆对象接口 Cloneable 和一个具体可克隆对象类 ConcretePrototype。该类实现了克隆方法,并在其中创建了一个新的对象副本。客户端通过调用克隆方法来复制一个新的对象,并可以修改其属性。

这是一个简单的原型模式示例,它展示了如何通过复制现有对象来生成新的对象副本。在实际应用中,原型模式通常会更复杂一些,但这个简单示例足以说明原型模式的基本原理。

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

Logo

纵情码海钱塘涌,杭州开发者创新动! 属于杭州的开发者社区!致力于为杭州地区的开发者提供学习、合作和成长的机会;同时也为企业交流招聘提供舞台!

更多推荐