【设计模式】腾讯面经:原型模式怎么理解?

这篇具有很好参考价值的文章主要介绍了【设计模式】腾讯面经:原型模式怎么理解?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是原型模式?

设计模式是编程世界的基石,其中原型模式无疑是一种常用而又高效的创建对象的手段。那么,什么是原型模式呢?又该如何去实现它?

在软件工程中,原型模式是一种创建型设计模式。我们可以这样理解:如果创建一个新的对象成本较高,原型模式允许我们复制一个已存在的对象,而非从新构造,这相当于做了一次克隆操作。这就在一定程度上避开了构造函数的约束,极大地提升了程序的执行效率。

【设计模式】腾讯面经:原型模式怎么理解?,设计模式,设计模式,原型模式,面试

原型模式的实现

GO

下面,我们通过Go语言来演示一下原型模式的具体实现。

我们需要创建一个Animal接口,有一个Clone方法代表创建一个自我复制:

type Animal interface {
    Clone() Animal
    GetName() string
}

然后我们定义a Dog结构体并实现Animal接口:

type Dog struct {
    name string
}

func (d *Dog) Clone() Animal {
    return &Dog{name: d.name}
}

func (d *Dog) GetName() string {
    return d.name
}

func NewDog(name string) Animal {
    return &Dog{name: name}
}

克隆操作只是简单地复制了Dog的name字段。

接下来我们就可以进行克隆操作:

func main (){
	original := NewDog("Max")
	
	clone := original.Clone()
    fmt.Println(clone.GetName()) // Output: Max
}

您可以看到,我们没有通过构造函数创造新的对象,而是直接通过克隆得到新的对象。

Java

首先,我们需要创建一个抽象的Animal接口,这个接口定义了cloneAnimal方法,表示创建一个自我副本。

public interface Animal extends Cloneable {
    Animal cloneAnimal();
    String getName();
}

然后,我们创建一个Dog类,实现了Animal接口。

public class Dog implements Animal {
    private String name;

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

    @Override
    public Animal cloneAnimal() {
        return new Dog(name);
    }

    @Override
    public String getName() {
        return name;
    }
}

在Dog类的cloneAnimal方法中,我们通过new Dog(name)复制了一个Dog对象。

下面我们就可以进行克隆操作了:

public class TestPrototype {
    public static void main(String[] args) {
        Dog original = new Dog("Max");
        Dog clone = (Dog) original.cloneAnimal();
        System.out.println(clone.getName()); // Output: Max
    }
}

你可以看到,使用原型模式,我们可以非常简单地创建一个新对象,而无需显式地使用构造函数。这样可以提高程序的性能,特别是在大量创建对象时。

优缺点

原型模式的优点主要体现在,它可以减少系统中类的数量,当一个类的实例之间的状态没有变化时,可以使用原型模式进行复制和拷贝,无需再创建对象,节省了系统资源。

而它的缺点则在复制复杂对象时显现得比较明显,对象之间存在深层次的引用关系,简单复制可能会导致一系列问题,增加了开发的复杂度。

与其他设计模式的比较

原型模式和工厂模式?

原型模式和工厂模式都属于创建型设计模式,但它们的关注点并不同。原型模式注重复制已有的实例,减少新对象的创建工作。工厂模式则是注重通过共通的接口创建新实例,去实现对象的创建和使用的解耦合。

原型和单例模式?

原型模式和单例模式可以有些对立。单例模式强调系统内只能有一个实例,而原型模式则是鼓励对象的复制。

原型模式和克隆模式有什么区别和联系?

原型模式和克隆模式其实在很多情况下是一回事,他们都是基于已存在对象生成新的对象。原型模式是一种创建型设计模式,它指的是通过复制一个已存在的实例来返回新的实例,而这个复制的过程,就是我们通常所说的克隆。所以,克隆的概念通常是作为实现原型模式的一种手段。

当我们讨论“克隆”时,通常会分为“浅克隆”和“深克隆”两种:

  • 浅克隆:创建一个新的对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制;如果字段是引用类型,则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一对象。
  • 深克隆:创建一个新的对象,并对其进行递归复制,不只是将当前对象的非静态字段复制到该新对象,而且还要将字段指向的所有对象都进行复制。所以,原始对象及其副本不引用同一对象。

总的来说,无论是原型模式,还是浅克隆、深克隆,他们的核心思想都是根据一个已存在的对象,快速地生成一个新的对象。这种方式特别适合于创建复杂对象或者创建对象的成本较大的情况。

总结

原型模式是设计模式中一个相当实用的模式,它帮助我们在保证性能的同时,完成对象的生成。它简化了对象的创建,提高了对象的复用性,但同时我们也要注意其所带来的问题。

如果上面的内容对你有帮助,请点赞收藏哦,我会分享更多的经验~文章来源地址https://www.toymoban.com/news/detail-823344.html

到了这里,关于【设计模式】腾讯面经:原型模式怎么理解?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 设计模式-原型模式

    目录 一、传统方式 二、原型模式  三、浅拷贝和深拷贝 克隆羊问题: 现在有一只羊tom,姓名为: tom,年龄为: 1,颜色为: 白色,请编写程序创建和tom羊属性完全相同的10只羊。 传统的方式的优缺点: 简单易操作。优点是比较好理解。 在创建新的对象时,总是需要重新获取原

    2024年02月16日
    浏览(29)
  • 【设计模式】原型模式

    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例

    2024年02月13日
    浏览(36)
  • 设计模式——原型模式

            原型模式就是有时我们需要多个类的实例,但是一个个创建,然后初始化,这样太麻烦了,此时可以使用克隆,来创建出克隆对象,就能大大的提高效率。具体就是要让此类实现Cloneable接口,然后重写Object类中的clone()方法。         具体实现就是克隆了,前面都有

    2024年02月14日
    浏览(32)
  • 设计模式5:原型模式

    Prototype Pattern 如果对象的创建成本比较大,可以基于已有的原型对象通过来创建新的对象,节省创建时间。 设计模式之原型模式 实现Cloneable接口的方式。这里就不展开分析浅克隆和深克隆了,后面再专门分析浅克隆和深克隆,不影响对原型模式的理解。 用序列化实现创建对

    2024年02月11日
    浏览(40)
  • 设计模式(6)原型模式

    一、介绍 Java中自带的原型模式是clone()方法。该方法是Object的方法,native类型。他的作用就是将对象的在内存的那一块内存数据一字不差地再复制一个。我们写简单类的时候只需要实现Cloneable接口,然后调用Object::clone方法就可实现克隆功能。这样实现的方式是浅拷贝。  1、

    2024年02月12日
    浏览(32)
  • 重温设计模式 --- 原型模式

    原型模式 是一种创建型设计模式,它允许我们创建一个对象的副本,而不需要显式地使用构造函数来创建一个新的对象。这种模式通常用于创建那些具有复杂创建过程或需要大量资源的对象。 在原型模式中,我们首先定义一个原型接口,该接口包含一个克隆方法。然后我们

    2024年02月13日
    浏览(35)
  • 设计模式系列-原型模式

    一、上篇回顾 上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每 个组成部分的详细创建步骤可以是动态的变化的,但是每个对象的组装的过程来说可能是相对固定的或者说是

    2024年02月09日
    浏览(35)
  • 设计模式-原型模式详解

    简介设计模式 设计模式是在软件开发中常见问题的解决方案,它们是经过实践和经验总结出来的可重用的设计思想和解决方案。设计模式通过提供通用的架构、原则和指导,帮助开发人员更有效地编写高质量的代码。 设计模式分为三个主要类别: 创建型模式:关注对象的创

    2024年02月10日
    浏览(27)
  • 设计模式 - 原型模式

    传统方式 优点: 比较好理解,简单易操作 缺点: 在创建新的对象时,总是需要重新获取原始对象的属性,如果创建的对象比较复杂 时,效率较低 总是需要重新初始化对象,而不是动态地获得对象运行时的状态, 不够灵活 原型模式 基本介绍: 原型模式(Prototype模式)是指:用原型

    2024年02月06日
    浏览(39)
  • 设计模式三(原型模式)

    在开发过程中,创建多个数据相同的对象,每次new都开销比较大,在这里可以使用对象克隆,以先创建的原型对象为模板进行对象的复制。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象

    2024年01月25日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包