【创建型设计模式】C#设计模式之原型模式

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

原型模式是一种创建型设计模式,它通过复制现有对象来创建新对象,而无需通过实例化的方式。它允许我们使用已经存在的对象作为蓝本,从而创建新的对象,这样可以避免重复初始化相似的对象,提高了对象的创建效率。

现在给您出一个题目:
假设您正在设计一个游戏角色的生成器系统,其中包含不同种类的角色,例如战士、法师和射手等。请使用原型模式来设计该系统的角色生成器。角色生成器需要具备以下功能:

根据已有的角色原型,生成新的角色对象。
不同类型的角色对象具有不同的属性,如姓名、等级、技能等。
用户可以根据需要选择不同类型的角色,并生成对应的角色对象。
请根据以上要求,使用原型模式设计该角色生成器系统,并简要说明您的设计思路。

代码:文章来源地址https://www.toymoban.com/news/detail-640205.html


// 角色原型接口
interface ICharacterPrototype
{
    ICharacterPrototype Clone();
    void ShowInfo();
}

// 战士角色原型
class Warrior : ICharacterPrototype
{
    public string Name { get; set; }
    public int Level { get; set; }
    public List<string> Skills { get; set; }

    public ICharacterPrototype Clone()
    {
        return (ICharacterPrototype)MemberwiseClone();
    }

    public void ShowInfo()
    {
        Console.WriteLine($"战士角色: {Name} (等级: {Level})");
        Console.WriteLine("技能列表:");
        foreach (string skill in Skills)
        {
            Console.WriteLine($" - {skill}");
        }
    }
}

// 法师角色原型
class Mage : ICharacterPrototype
{
    public string Name { get; set; }
    public int Level { get; set; }
    public List<string> Spells { get; set; }

    public ICharacterPrototype Clone()
    {
        return (ICharacterPrototype)MemberwiseClone();
    }

    public void ShowInfo()
    {
        Console.WriteLine($"法师角色: {Name} (等级: {Level})");
        Console.WriteLine("法术列表:");
        foreach (string spell in Spells)
        {
            Console.WriteLine($" - {spell}");
        }
    }
}

// 射手角色原型
class Archer : ICharacterPrototype
{
    public string Name { get; set; }
    public int Level { get; set; }
    public int Arrows { get; set; }

    public ICharacterPrototype Clone()
    {
        return (ICharacterPrototype)MemberwiseClone();
    }

    public void ShowInfo()
    {
        Console.WriteLine($"射手角色: {Name} (等级: {Level})");
        Console.WriteLine($"箭矢数量: {Arrows}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 初始化角色原型
        Warrior warriorPrototype = new Warrior
        {
            Name = "战士",
            Level = 10,
            Skills = new List<string> { "近身攻击", "重击" }
        };

        Mage magePrototype = new Mage
        {
            Name = "法师",
            Level = 8,
            Spells = new List<string> { "火球术", "闪电术" }
        };

        Archer archerPrototype = new Archer
        {
            Name = "射手",
            Level = 6,
            Arrows = 50
        };

        // 根据原型克隆生成新角色对象
        ICharacterPrototype warrior = warriorPrototype.Clone();
        ICharacterPrototype mage = magePrototype.Clone();
        ICharacterPrototype archer = archerPrototype.Clone();

        // 显示角色信息
        warrior.ShowInfo();
        mage.ShowInfo();
        archer.ShowInfo();
    }
}

这段代码中的 Clone() 方法是用于复制角色原型对象的方法。在这里使用了 MemberwiseClone() 方法来执行浅拷贝,即创建一个与原对象相同的新对象,并将原对象的值类型成员和引用类型成员的引用复制给新对象。

MemberwiseClone() 方法是 C# 中的内置方法,它会创建对象的浅表副本,即对于值类型成员,会直接复制其值;对于引用类型成员,只会复制引用,而不会创建新的对象。这意味着,如果原对象的引用类型成员发生了改变,克隆对象的对应成员也会受到影响。

需要注意的是,MemberwiseClone() 方法是浅拷贝,对于包含复杂对象的成员,可能需要实现自定义的深拷贝逻辑来确保对象的完全复制。

在这个示例中,由于角色原型的成员都是基本数据类型和字符串,因此浅拷贝已足够满足需求,并且使用简单方便。

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

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

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

相关文章

  • 设计模式-创建型模式(单例、工厂、建造、原型)

    设计模式:软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 面向对象三大特性:封装、继承、多态。 面向对象设计的SOLID原则: (1)开放封闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情

    2024年02月08日
    浏览(43)
  • 【设计模式】第6节:创建型模式之“原型模式”

    由于本人现在所使用的语言主要是golang,所以后面的代码主要使用golang编写。语言实现应该不是障碍,主要是理解每种设计模式它的思想。 如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原

    2024年02月06日
    浏览(33)
  • 创建型设计模式:5、原型模式(Prototype Pattern)

    目录 1、原型模式的含义 2、C++实现原型模式的简单实例 1、原型模式的含义 通过复制现有对象来创建新对象,而无需依赖于显式的构造函数或工厂方法,同时又能保证性能。 The prototype pattern is a creational design pattern in software development. It is used when the type of objects to create is det

    2024年02月13日
    浏览(28)
  • 【C++设计模式之原型模式:创建型】分析及示例

    简介 原型模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制已有对象来生成新的对象,而无需再次使用构造函数。 描述 原型模式通过复制现有对象来创建新的对象,而无需显式地调用构造函数或暴露对象的创建细节。它使用原型接口来声明克隆方法,所有实现

    2024年02月07日
    浏览(26)
  • 《golang设计模式》第一部分·创建型模式-02-原型模式(Prototype)

    用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 Prototype(抽象原型类):它是声明克隆方法的接口,或所有具体原型类的公共父类 它可以是抽象类也可以是接口,甚至还可以是具体实现类。 ConcretePrototype(具体原型类):它实现在抽象原型类中声明的

    2024年02月14日
    浏览(29)
  • Java设计模式之创建型-原型模式(UML类图+案例分析)

    目录 一、基础概念 二、UML类图 三、角色设计 四、案例分析  4.1、通用实现(浅克隆) 4.2、深克隆 五、总结 原型模式通过复制已有对象作为原型,通过复制该原型来返回一个新对象,而不是新建对象,说白了就是不断复制相同的对象罢了。 角色 描述 抽象原型类 规定了具

    2024年02月15日
    浏览(37)
  • 【java设计模式】创建型模式介绍(工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式)

    简介 本文介绍Java设计模式中创建型模式的五种 一、工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工

    2024年02月16日
    浏览(39)
  • [设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式

    前言: 为什么之前写过Golang 版的设计模式,还在重新写 Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很多人学习有做笔记的习惯,如果单纯的只是放一张图片,那

    2024年01月23日
    浏览(29)
  • 【创建型设计模式】C#设计模式之建造者模式

    参考代码:

    2024年02月13日
    浏览(32)
  • c#设计模式-创建型模式 之 单例模式

    目录 前言: 优点: 缺点: 饿汉式(静态变量方式) 懒汉式(线程不安全) 懒汉式(双重检查锁定) 推荐方式Lazy 总结: 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供 了一种访问其唯一的对象的方式,可以直接访问,

    2024年02月13日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包