重温设计模式 --- 原型模式

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

引言

原型模式是一种创建型设计模式,它允许我们创建一个对象的副本,而不需要显式地使用构造函数来创建一个新的对象。这种模式通常用于创建那些具有复杂创建过程或需要大量资源的对象。

在原型模式中,我们首先定义一个原型接口,该接口包含一个克隆方法。然后我们创建一个原型对象,该对象实现了原型接口并提供了自己的克隆方法。最后,我们可以使用原型对象的克隆方法来创建新的对象,而无需重新实例化原型对象。

IClone接口

需要定义一个IClone接口。这个类中应该包含一个 Clone 方法,用于克隆自身。

public interface IClone<T> where T : class
{
    public T Clone();
}

原型类

定义一个具体原型类,它实现IClone接口,并实现了Clone方法

public class ConcretePrototype : IClone<ConcretePrototype>
{
    private string _name;

    public ConcretePrototype(string name)
    {
        _name = name;
    }

    public ConcretePrototype Clone()
    {
        return (ConcretePrototype)this.MemberwiseClone();
    }

    public void SetName(string name)
    {
        _name = name;
    }

    public void PrintName()
    {
        Console.WriteLine($"Name: {_name}");
    }
}

在具体原型类中,我们实现了 Clone 方法,并使用了 MemberwiseClone 方法来复制对象。此外,我们还添加了一个 SetName 方法和一个 PrintName 方法,用于演示对象的复制和修改。

:::tip{title="提示"}

  1. 使用 Clone 方法来复制对象。需要注意的是,在复制对象时,我们需要使用 MemberwiseClone 方法或其他深拷贝方法来复制对象本身,而不是复制它的引用。此外,如果需要复制对象的引用类型成员,我们需要在具体原型类中对它们进行深拷贝
  2. 原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
  3. 执行Clone方法复制对象时,不执行其构造函数
    :::

接下来,我们可以使用具体原型类来创建新的对象。具体地说,我们可以先创建一个原型对象,然后调用它的 Clone 方法来复制它,并修改复制出的对象的状态。

ConcretePrototype prototype = new ConcretePrototype("prototype");

ConcretePrototype clone = (ConcretePrototype)prototype.Clone();

prototype.PrintName(); // Name: prototype

clone.PrintName(); // Name: prototype

clone.SetName("clone");

prototype.PrintName(); // Name: prototype

clone.PrintName(); // Name: clone

在这段代码中,我们首先创建了一个名为 prototype 的具体原型对象,并输出它的名字。然后,我们调用了 prototypeClone 方法来复制它,并将结果保存在名为 clone 的变量中。接着,我们修改了 clone 的名字为 "clone",并分别输出 prototypeclone 的名字,以证明它们是不同的对象。

总结

原型模式适用于以下情况:文章来源地址https://www.toymoban.com/news/detail-541867.html

  • 当需要创建的对象的类型由程序在运行时确定时,原型模式比工厂模式更加灵活。
  • 当需要创建的对象的创建过程较为复杂,或者需要初始化较长时间时,原型模式可以避免重复创建对象的开销。
  • 当需要创建的对象与其它对象具有相似的属性和方法时,原型模式可以避免重复编写相同的代码。

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

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

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

相关文章

  • 重温设计模式 --- 观察者模式

    观察者模式 是一种行为型设计模式,它允许对象之间建立一种一对多的关系,使得当一个对象状态改变时,所有依赖它的对象都能够自动得到通知并更新自己的状态。该模式可以帮助我们实现松耦合的系统,以便更好地应对变化和扩展。 在观察者模式中,有两个角色: 观察

    2024年02月13日
    浏览(56)
  • 重温设计模式系列 --- 完整精华篇

    软件开发过程中,我们经常会遇到各种设计问题,例如如何管理对象之间的关系、如何优化代码的可复用性和可维护性等等。为了解决这些问题,我们可以使用设计模式。 设计模式是一种被广泛接受的软件设计思想,它提供了一套通用的解决方案,可以帮助我们更好地解决常

    2024年02月13日
    浏览(40)
  • 二十三种设计模式全面解析-原型模式进阶之原型管理器:集中管理对象原型的设计模式之道

    在软件开发中,我们经常需要创建和复制对象。然而,有时候直接创建对象可能会导致性能下降或代码重复。为了解决这些问题,原型模式应运而生。而使用原型管理器(Prototype Manager)来集中管理原型对象可以进一步提高灵活性和可维护性。本文将详细介绍原型管理器的用

    2024年02月07日
    浏览(55)
  • JAVA设计模式----原型设计模式

    定义 :用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型 :创建类模式 类图 : 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只

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

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

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

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

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

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

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

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

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

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

    2024年01月25日
    浏览(45)
  • 【设计模式】原型模式

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

    2024年02月13日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包