原型模式(Prototype Pattern)

文章目录

1.原型模式定义

复制已有对象, 而又无需使代码依赖它们所属的类。

2.UML图

3.实现方式

  • 创建原型接口, 并在其中声明 克隆方法。 如果你已有类层次结构, 则只需在其所有类中添加该方法即可。
  • 原型类必须另行定义一个以该类对象为参数的构造函数。 构造函数必须复制参数对象中的所有成员变量值到新建实体中。 如果你需要修改子类, 则必须调用父类构造函数, 让父类复制其私有成员变量值。

4.具体实现

4.1 接口方式

克隆类:

csharp 复制代码
//年级
public class Grade
{
    public int Stu_Grade { get; set; }
}

public class Student : IClone<Student>
{
    public string Name { get; set; }

    public int Age { get; set; }

    public Grade Grade { get; set; }

    public Student Clone<Student>()
    {
        return (Student)this.MemberwiseClone();
    }
	// 输出学生信息
    public override string ToString()
    {
        return $"姓名:{Name},年龄:{Age},年级:{Grade.Stu_Grade}";
    }
}

调用:

csharp 复制代码
Student student = new Student()
{
    Name = "ming",
    Age = 18,
    Grade = new Grade(){Stu_Grade = 6},
};

Student copyStu = student.Clone<Student>();
Console.WriteLine(copyStu.ToString());

结果:

姓名:ming,年龄:18,年级:6

4.2 类继承方式

原型模式在本质上就是得到拷贝一个类,因此可参考我的另一篇博文:
C# 深拷贝和浅拷贝

相关推荐
J2虾虾3 天前
Spring AI Alibaba - 检索增强生成(RAG)
人工智能·spring·原型模式
skywalk81635 天前
根据言律的语法,能否用racket进行开发呢?主要探讨是否可行。 racket在这里:E:\Program Files\Racket\Racket.exe
开发语言·原型模式
invicinble6 天前
设计模式(类的拓扑结构)(描述总纲)
设计模式·原型模式
UXbot7 天前
初创公司如何选择合适的UI工具支撑快速迭代产品?
人工智能·低代码·ios·交互·原型模式
之歆8 天前
Day18_JavaScript高级核心:原型链、继承与事件循环机制深度解析(上)
开发语言·javascript·原型模式
看山是山_Lau10 天前
原型模式:当复制比重新创建更高效时
设计模式·原型模式
WHS-_-202213 天前
Millimeter Wave ISAC-SLAM: Framework and RFSoC Prototype
人工智能·算法·原型模式
weixin_3077791313 天前
基于Vosk与CTranslate2的实时语音识别翻译系统 —— 完整C++实现详解
人工智能·算法·自动化·语音识别·原型模式
nnsix14 天前
设计模式 - 原型模式 笔记
笔记·设计模式·原型模式
咖啡八杯15 天前
GoF设计模式——原型模式
java·后端·设计模式·原型模式