设计模式(创建型——ProtoType模式)

本文介绍了Prototype设计模式的概念及其应用场景,详细阐述了如何通过拷贝原型对象来创建新的对象实例,包括浅拷贝和深拷贝的区别及实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五、ProtoType模式

5.1 ProtoType模式的概念

  • 定义

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

  • 使用场景
    • 与工厂模式类似,都是用于创建同类对象
    • 不同点
      • 工厂模式需要单独定义一个工厂来创建对象
      • ProtoType模式将创建对象的过程与类的定义(即原型)耦合在一个类中,且新创建的对象与原型实例的各部分都是相同的

5.2 ProtoType模式的实现

  • 将工厂方法中创建对象的过程与类的定义合并在一块,并通过拷贝的方式生成新对象
  • 拷贝
    • 浅拷贝
      • 对于引用类型的变量,拷贝的是内存地址,指向同一对象
      • Object类的实例方法MemberwiseClone()
    • 深拷贝
      • 引用类型的变量,进行全值拷贝,指向具有相同属性值的不同对象
      • 序列化与反序列化

在这里插入图片描述

public abstract class Animal
{
    public abstract void Eat();
    public abstract void Sleep();

    public abstract Animal Clone();
}

public class Cat : Animal
{
    public override Animal Clone()
    {
        return (Animal)this.MemberwiseClone();
    }

    public override void Eat()
    {
        Console.WriteLine("猫吃鱼!");
    }
    public override void Sleep()
    {
        Console.WriteLine("猫睡觉!");
    }
}


public class Dog : Animal
{
    public override Animal Clone()
    {
        return (Animal)this.MemberwiseClone();
    }
    public override void Eat()
    {
        Console.WriteLine("狗吃肉!");
    }
    public override void Sleep()
    {
        Console.WriteLine("狗睡觉!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal animal = new Cat();
		//用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
        Animal animalA = animal.Clone();
        animalA.Eat();
        animalA.Sleep();

        Animal animalB = animal.Clone();
        animalB.Eat();
        animalB.Sleep();

        Console.ReadLine();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值