当前位置: 首页 >  网技达人 >  重温设计模式 --- 原型模式

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

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

引言

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

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

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}");
    }
}
方法和一个 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 的名字,以证明它们是不同的对象。

总结

原型模式适用于以下情况:

  • 当需要创建的对象的类型由程序在运行时确定时,原型模式比工厂模式更加灵活。
  • 当需要创建的对象的创建过程较为复杂,或者需要初始化较长时间时,原型模式可以避免重复创建对象的开销。
  • 当需要创建的对象与其它对象具有相似的属性和方法时,原型模式可以避免重复编写相同的代码。
内容
  • 最新消息,powershell,10多年的癌症被治好了!
    最新消息,powershell,
    2023-12-10
    问:癌症是指什么?.答:.powershell一直有个特性,它的管道会传递对象,请看:.‘abc’ | ForEach-
  • RocketMQ消费者是如何负载均衡的
    RocketMQ消费者是如何负载
    2023-12-09
    摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )
  • 2分钟快速上手流水线的创建与运行
    2分钟快速上手流水线的创建与运行
    2023-12-09
    摘要: 通过流水线新手体验模板,体验一条含代码检查、构建阶段、部署发布常用流水线的创建与执行。.本文分享自华为云社区《2
  • Three.js教程:对象克隆、复制
    Three.js教程:对象克隆、
    2023-12-08
    推荐:将 NSDT场景编辑器 加入你的3D工具链.其他系列工具: NSDT简石数字孪生.对象克隆.clone()和复制.
  • FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.FlashDuty.现在已经全面支持了深色模式,这为您提供
  • 运动儿童外套,防风保暖,轻便舒适,宝宝运动必备
    运动儿童外套,防风保暖,轻便舒适
    2023-12-06
    运动儿童外套,防风保暖,轻便舒适,宝宝运动必备.运动是孩子们健康成长的重要组成部分,而一件适合运动的外套对于宝宝的运动体
  • 休闲简约短袖衬衫
    休闲简约短袖衬衫
    2023-12-21
    休闲简约短袖衬衫.现代人生活节奏快,休闲简约的穿着成为时尚潮流。短袖衬衫作为经典的休闲单品,一直备受时尚人士的青睐。它舒
  • 精美儿童连衣裙,时尚设计,舒适面料,适合各种场合穿着
    精美儿童连衣裙,时尚设计,舒适面
    2023-12-26
    精美儿童连衣裙,时尚设计,舒适面料,适合各种场合穿着.儿童连衣裙作为孩子们的日常穿着之一,一直备受家长们的关注。精美儿童
  • 优质皮质钱包
    优质皮质钱包
    2024-01-10
    优质皮质钱包.皮质钱包一直以来都是时尚男士和女士们不可或缺的配饰,不仅可以提升整体造型的时尚感,还可以展现个人品味和品质
  • 休闲儿童T恤,可爱印花,柔软透气,让宝宝轻松玩耍舒适自在
    休闲儿童T恤,可爱印花,柔软透气
    2024-01-15
    休闲儿童T恤,给宝宝舒适自在的穿着体验.1. 透气环保的面料,让宝宝轻松玩耍.休闲儿童T恤采用了柔软透气的面料,为宝宝打
  • 暖心家居服套装,柔软舒适,可爱**形象,让宝宝安心入睡
    暖心家居服套装,柔软舒适,可爱*
    2023-12-16
    暖心家居服套装,让宝宝安心入睡.宝宝的睡眠质量对成长发育至关重要,而穿着舒适的家居服对宝宝的睡眠质量有着直接的影响。为了
  • 潮流风衣大衣,彰显都市时尚风采
    潮流风衣大衣,彰显都市时尚风采
    2023-12-16
    潮流风衣大衣,彰显都市时尚风采.潮流风衣大衣一直是时尚界备受追捧的单品之一。它既能为我们遮风挡雨,又能为我们穿出时尚感,
  • 时尚卫衣套装,展现青春活力
    时尚卫衣套装,展现青春活力
    2023-12-11
    时尚卫衣套装,展现青春活力.时尚卫衣套装一直是年轻人衣橱中的必备单品,它不仅可以给人带来舒适的穿着体验,更能展现出青春活
  • 时尚修身连衣裙,展现优雅女性魅力
    时尚修身连衣裙,展现优雅女性魅力
    2023-12-06
    时尚修身连衣裙,展现优雅女性魅力.时尚修身连衣裙一直是女性衣橱里的必备单品,不仅款式多样,而且能够展现出女性的优雅魅力。
  • 修身弹力牛仔裤
    修身弹力牛仔裤
    2023-12-26
    修身弹力牛仔裤:展现你的魅力.一、时尚的必备单品.修身弹力牛仔裤一直都是时尚界的必备单品,它不仅可以展现出个人的魅力,还