【编码魔法师系列_构建型4】原型模式(Prototype Pattern)

这篇具有很好参考价值的文章主要介绍了【编码魔法师系列_构建型4】原型模式(Prototype Pattern)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【编码魔法师系列_构建型4】原型模式(Prototype Pattern),设计模式,原型模式,java,开发语言,程序人生,设计模式,后端
👉直达编码魔法师系列其他文章👈

学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。

概念:

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

实例:

克隆原本的五菱宏光对象

目的:

原本的五菱宏光修改配置后,克隆对象配置不变

适用场景:

需要复制一些对象,同时又希望代码独立于这些对象所属的具体类

优点:

1、使用原型模式创建实例对象比直接new一个对象性能好,尤其创建大对象,性能的差别非常明显。
2、简化创建对象的过程,可以直接修改现有的对象实例的值,达到复用的目的

弊端:

1、每个对象内部都要覆盖Object的clone方法才能被拷贝,当对类进行改造时,需要修改代码,违背了“开闭原则”。
2、如果克隆引用数据类型,需要递归克隆

类图:

【编码魔法师系列_构建型4】原型模式(Prototype Pattern),设计模式,原型模式,java,开发语言,程序人生,设计模式,后端

框架用到的地方:

Java 中,Object 的 clone() 方法

Coding:

Car:

public class Car {
    private String name;
    private Integer box;
    private String power;

    public String getName() {
        return name;
    }

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

    public Integer getBox() {
        return box;
    }

    public void setBox(Integer box) {
        this.box = box;
    }

    public String getPower() {
        return power;
    }

    public void setPower(String power) {
        this.power = power;
    }

    public Car() {
    }

    public Car(Car car) {
        this.name = car.getName();
        this.box = car.getBox();
        this.power = car.getPower();
    }

    public Car clone() {
        return new Car(this);
    }

    public void show() {
        System.out.println(
                "一辆" + this.getPower() + this.getBox() + "厢" + this.getName()
        );
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        Car wuLing = new Car();
        wuLing.setName("五菱宏光");
        wuLing.setBox(2);
        wuLing.setPower("汽油");
        System.out.println("----------原始配置----------");
        wuLing.show();
        //通过clone方法创建的新对象
        Car clone = wuLing.clone();
        wuLing.setBox(3);
        //地址引用
        Car wuLing2 = wuLing;
        System.out.println("----------修改配置后wuLing----------");
        wuLing.show();
        System.out.println("----------原始配置后wuLing2----------");
        wuLing2.show();
        System.out.println("----------原始配置后clone----------");
        clone.show();
    }
}

我们可以看到wuLing2是直接将wuLing复制给自己,因为Java的赋值只是传递地址,所以wuLing2会随着wuLing的配置修改而改变。
但是调用clone的方法并没有因为wuLing的配置修改而修改,这是因为clone是一个被克隆出来的全新对象(java自带的clone方法是浅拷贝)。
如果您想了解更多关于Java深拷贝和浅拷贝的信息,可以到小名的另一篇文章:Java对象浅拷贝与深拷贝进行详细了解😊文章来源地址https://www.toymoban.com/news/detail-805243.html

测试结果:

----------原始配置----------
一辆汽油2厢五菱宏光
----------修改配置后wuLing----------
一辆汽油3厢五菱宏光
----------原始配置后wuLing2----------
一辆汽油3厢五菱宏光
----------原始配置后clone----------
一辆汽油2厢五菱宏光
👉直达编码魔法师系列其他文章👈

文章后期会持续优化,如果觉得小名的文章帮助到了您,请关注小名,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
编码魔法师系列文章,会收录在小名的【设计模式】专栏中,希望大家可以持续关注🎉

到了这里,关于【编码魔法师系列_构建型4】原型模式(Prototype Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式—原型模式(Prototype)

    目录 一、什么是原型模式? 二、原型模式具有什么优缺点吗? 三、有什么缺点? 四、什么时候用原型模式? 五、代码展示 ①、简历代码初步实现 ②、原型模式 ③、简历的原型实现 ④、深复制 ⑤、浅复制 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的

    2024年02月11日
    浏览(35)
  • 【设计模式】4、prototype 原型模式

    https://refactoringguru.cn/design-patterns/prototype 如果希望 复制对象, 可使用 “prototype 模式” 如果 “待复制的对象” 是 interface 而不是 class, 或者如果 class 有 private 变量时. 无法知道 \\\"待复制的对象\\\"的细节, 则需要其实现 “clone()” 方法供外部调用. 本例希望实现文件系统的复制功能

    2024年04月15日
    浏览(32)
  • 原型模式(Prototype Pattern)

    原型模式(Prototype Pattern)是一种创建型设计模式,它用于通过复制现有对象来创建新对象,而无需依赖显式的构造函数。 在原型模式中,我们创建一个原型对象,并通过复制该原型对象来创建新的对象。这样做的好处是,我们可以避免创建对象时的复杂实例化过程,而是通

    2024年02月15日
    浏览(36)
  • 原型模式(Prototype)

    原型模式是一种创建型设计模式,使调用方能够复制已有对象,而又无需使代码依赖它们所属的类。当有一个类的实例(原型),并且想通过复制原型来创建新对象时,通常会使用原型模式。 原型模式包含如下角色: Prototype,原型类,用来声明克隆方法。在绝大多数情况下

    2024年02月14日
    浏览(35)
  • 原型模式(Prototype Pattern)

    原型模式(Prototype Pattern)结构较为简单,它是一种特殊的创建型模式, 当需要创建大量相同或者相似对象时 ,可以 通过对一个已有对象的复制获取更多对象 。Java语言提供了较为简单的原型模式解决方案,只需要创建一个原型对象,然后通过在类中定义的克隆方法复制自己

    2024年02月03日
    浏览(33)
  • 5 原型模式 Prototype

    指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 当代码不应该依赖于需要复制的对象的具体类时,请使用Prototype模式。 Spring源码中的应用   1.可以不耦合具体类的情况下克隆对象 2.避免重复的初始化代码 3.更方便的构建复杂对象

    2024年02月22日
    浏览(35)
  • 设计模式——原型模式(Prototype Pattern)

    概述        原型模式(Prototype  Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自

    2024年01月16日
    浏览(40)
  • 设计模式|原型模式(Prototype Pattern)

    原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而无需显式地指定它们的类。这种模式通常用于当对象的创建成本较高,或者对象初始化过程比较复杂时。 原型模式的主要角色包括原型接口(Prototype Interface)、具体原型类(

    2024年04月23日
    浏览(21)
  • 【设计模式--原型模式(Prototype Pattern)

    原型模式(Prototype Pattern)是一种创建型设计模式,它的主要目的是通过复制现有对象来创建新的对象,而无需显式地使用构造函数或工厂方法。这种模式允许我们创建一个可定制的原型对象,然后通过复制它来创建新的对象,从而避免了重复构建相似的对象。 在原型模式中

    2024年02月11日
    浏览(31)
  • 设计模式六:原型模式(Prototype Pattern)

    原型模式是一种创建对象的设计模式。它允许我们通过复制一个现有对象来创建新的对象,而无需知道其具体实现细节。在使用原型模式时,我们首先创建一个原始对象,然后根据需要复制该对象,以获得新创建的对象。 原型模式的主要思想是基于对象的复制。通过使用原型

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包