【創建型設計模式】C#設計模式之原型模式

原型模式是一種創建型設計模式,它通過復制現有對象來創建新對象,而無需通過實例化的方式。它允許我們使用已經存在的對象作為藍本,從而創建新的對象,這樣可以避免重復初始化相似的對象,提高了對象的創建效率。

現在給您出一個題目:
假設您正在設計一個游戲角色的生成器系統,其中包含不同種類的角色,例如戰士、法師和射手等。請使用原型模式來設計該系統的角色生成器。角色生成器需要具備以下功能:

根據已有的角色原型,生成新的角色對象。
不同類型的角色對象具有不同的屬性,如姓名、等級、技能等。
用戶可以根據需要選擇不同類型的角色,并生成對應的角色對象。
請根據以上要求,使用原型模式設計該角色生成器系統,并簡要說明您的設計思路。

代碼:


// 角色原型接口
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() 方法是淺拷貝,對于包含復雜對象的成員,可能需要實現自定義的深拷貝邏輯來確保對象的完全復制。在這個示例中,由于角色原型的成員都是基本數據類型和字符串,因此淺拷貝已足夠滿足需求,并且使用簡單方便。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sentinel

1、熔斷降級限流 熔斷 A服務調用B服務的某個功能&#xff0c;由于網絡不穩定、B服務卡機等問題&#xff0c;導致功能時間超長。如果這樣子的次數太多&#xff0c;我們就可以直接將B斷路&#xff08;A不再請求B接口&#xff09;&#xff0c;凡是調用B服務的直接返回降級數據&a…

13-數據結構-串以及KMP算法,next數組

串 目錄 串 一、串&#xff1a; 二、串的存儲結構&#xff1a; 三、模式匹配 1.簡單模式匹配&#xff08;BF算法&#xff09; 2.KMP算法 2.1-next&#xff08;j&#xff09;數組手工求解 2.2-nextval&#xff08;j&#xff09;數組手工求解 一、串&#xff1a; 內容受…

JVM垃圾回收篇-垃圾回收算法

JVM垃圾回收篇-垃圾回收算法 標記清除&#xff08;Mark Sweep&#xff09; 概念 collector指的就是垃圾收集器。 mutator是指除了垃圾收集器之外的部分&#xff0c;比如說我們的應用程序本身。 mutator的職責一般是NEW(分配內存)、READ(從內存中讀取內容)、WRITE(將內容寫入內…

將多個單獨的 Excel 文件合并成一個,并添加標題行

要將多個單獨的 Excel 文件合并成一個&#xff0c;并添加標題行&#xff0c;可以使用 Python 的 pandas 庫。以下是一個示例代碼&#xff0c;假設要合并的 Excel 文件都在同一個文件夾中&#xff1a; import os import pandas as pd # 指定文件夾路徑 folder_path path/to/fo…

vscode搭建c語言環境問題

c語言環境搭建參考文章:【C語言初級階段學習1】使用vscode運行C語言&#xff0c;vscode配置環境超詳細過程&#xff08;包括安裝vscode和MinGW-W64安裝及后續配置使用的詳細過程&#xff0c;vscode用戶代碼片段的使用&#xff09;[考研專用]_QAQshift的博客-CSDN博客 問題如下:…

[C++ 網絡協議] 套接字和地址族、數據序列

目錄 1. 套接字 1.1 在Linux平臺下構建套接字 1.1.1 用于接聽的套接字(服務器端套接字) 1.1.2 用于發送請求的套接字(客戶端套接字) 1.2 在Windows平臺下構建套接字 1.2.1 Winsock的初始化 1.2.2 用于接聽的套接字(服務器端套接字) 1.2.3 用于發送請求的套接字(客戶端套…

pytest框架快速進階篇-pytest前置和pytest后置,skipif跳過用例

一、Pytest的前置和后置方法 1.Pytest可以集成unittest實現前置和后置 importunittestimportpytestclassTestCase(unittest.TestCase):defsetUp(self)->None:print(unittest每個用例前置)deftearDown(self)->None:print(unittest每個用例后置)classmethoddefsetUpClass…

jmeter中用戶參數和用戶定義的變量的區別

如果使用jmeter做過參數化的人都知道&#xff0c;參數化的方式有多種&#xff0c;其中一種就是使用用戶定義的變量&#xff0c;還有一種是使用用戶參數。那么&#xff0c;這兩個有什么異同呢&#xff1f; 一、先說相同的點&#xff1a; 1、都可以參數化&#xff0c;以供sample…

allure測試報告

使用pytest結合Allure進行測試報告生成的簡單教程 allure測試報告 Allure基于Java開發&#xff0c;因此我們需要提前安裝Java 8或以上版本的環境。 ◆安裝allure-pytest插件在DOS窗口輸入命令“pip3 install allure-pytest”&#xff0c;然后按“Enter”鍵。 下載安裝Allure…

使用 Docker 部署 canal 服務實現MySQL和ES實時同步

文章目錄 0. 環境介紹0. 前置步驟1. 安裝Kibana和Elasticsearch2. 安裝Canal和Canal Adapter2.1 修改數據庫配置2.1.1 修改配置2.1.2 驗證mysql binlog配置2.1.3 查看日志文件2.1.4 用JDBC代碼插入數據庫 2.2 安裝Canal Server2.3 安裝Canal Adapter修改兩處配置文件配置文件取…

Linux 命令篇

一、啟動網絡命令 ip addr 查看網卡信息 service network start 啟動網卡 service network stop 關閉網卡 service network restart 重啟網絡 二、pwd 命令 查看當前目錄的路徑 linux 下所有的絕對路徑都是從根目錄 "/" 開始 root:是linux下root用戶的根目…

初識mysql數據庫之引入mysql客戶端庫

目錄 一、下載第三方庫 1. 準備工作 1. 使用mysql官網提供的庫 2. yum源安裝 二、測試第三方庫是否可用 三、mysql常用接口介紹 1. 查看官方文檔 2. 初始化 3. 關閉mysql 4. 連接mysql 5. 下達sql指令 四、一個簡單的C客戶端庫連接mysql程序 1. 頭文件 2. 初始化…

FFmpeg接收UDP碼流

一、FFmpeg參數初始化&#xff1a; //在打開碼流前指定各種參數比如:探測時間/超時時間/最大延時等//設置緩存大小,1080p可將值調大av_dict_set(&options, "buffer_size", "8192000", 0);//以tcp方式打開,如果以udp方式打開將tcp替換為udpav_dict_set(…

Could not resolve host: mirrorlist.centos.org; Unknown error解決方法

今天服務器安裝完CentOS系統后&#xff0c;安裝網絡的時候&#xff0c;出現無法聯網yum yum -y install net-tools 以上代碼無法運行并報錯&#xff0c;這里我要提醒大家&#xff0c;如果在初始安裝的時候選中安裝網絡工具模塊就不用在安裝net-tools了&#xff0c;因為我選中…

Angular 性能優化實戰

Angular 性能優化實戰 Angular 是一個非常強大的前端框架&#xff0c;但是如果不注意性能優化&#xff0c;應用程序可能會變得非常慢并增加加載時間。 以下是一些Angular性能優化經驗的實戰建議&#xff1a; 1. 使用 OnPush 變更檢測策略 默認情況下&#xff0c;Angular檢查…

vite跨域配置踩坑,postman鏈接后端接口正常,但是前端就是不能正常訪問

問題一&#xff1a;怎么都鏈接不了后端地址 根據以下配置&#xff0c;發現怎么都鏈接不了后端地址&#xff0c;proxy對了呀。 仔細看&#xff0c;才發現host有問題 // 本地運行配置&#xff0c;及反向代理配置server: {host: 0,0,0,0,port: 80,// cors: true, // 默認啟用并允…

爆肝整理,性能測試方法與關鍵指標以及瓶頸定位思路,一篇貫通...

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 性能測試方法 1、…

Python編程實現百度AI開放平臺的接口對接方法,詳解和實踐指南

Python編程實現百度AI開放平臺的接口對接方法,詳解和實踐指南 引言 百度AI開放平臺提供了豐富的人工智能接口,包括語音識別、圖像識別、自然語言處理等功能。本文將通過Python編程,詳解如何對接百度AI開放平臺的接口,并提供實際代碼示例。準備工作 在開始之前,我們需要先完…

智能家居(1)---工廠模式實現燈光控制(繼電器組)以及火災報警模組的封裝

采用工廠模式以面向對象的方式來封裝各種設備模塊&#xff0c;方便整合項目以及后期的維護和擴展 mainPro.c&#xff08;主函數&#xff09; #include <stdio.h> #include "controlDevice.h"struct Devices *pdeviceHead NULL; //設備工廠鏈…

抓包工具Fiddler下載與安裝

一、Fiddler介紹 1.Fiddler簡介 Fiddler 是一款免費、靈活、操作簡單、功能強大的 HTTP 代理工具&#xff0c;是目前最常用的 HTTP 抓包工具之一。可以抓取所有的 HTTP/HTTPS 包、過濾會話、分析請求詳細內容、偽造客戶端請求、篡改服務器響應、重定向、網絡限速、斷點調試等…