// 题1. 网络游戏技能系统
// 某 RPG 游戏里,角色技能既有基础效果(如火球术、冰箭),又可以叠加各种修饰(如强化版、带毒、范围伤害)。
// 要求:
// 基础技能可独立存在。
// 可以在运行时动态地给技能添加修饰。
// 修饰的顺序会影响最终效果。
cspublic abstract class ISkill { public abstract void Execute(); } // 基础效果 public class FireBall : ISkill { public override void Execute() { Console.WrileLine("装备火球"); } } public class IceArrow : ISkill { public override void Execute() { if(skill != null) this.skill.Execute(); Console.WrileLine("装备冰箭"); } } public abstract class SkillDecorator : ISkill { public ISkill innerSkill; public PowerUpDecorator(ISkill skill) { this.skill = innerSkill; } public override void Execute() { innerSkill.Execute(); } } public class PowerUpDecorator : SkillDecorator { public PowerUpDecorator(ISkill skill):base(skill) { } public override void Execute() { base.Execute(); Console.WriteLine("能力提升"); } } public abstract class PoisonDecorator : SkillDecorator { public PoisonDecorator(ISkill skill) : base(skill) { } public override void Execute() { base.Execute(); Console.WrileLine("附毒"); } } public class AoEDecorator : SkillDecorator { public AoEDecorator(ISkill skill) : base(skill) { } public override void Execute() { base.Execute(); Console.WrileLine("造成范围伤害"); } } public class Client { public static void Main() { ISkill fireBall = new FireBall(); ISkill enhancedFireBall = new PowerUpDecorator(new PoisonDecorator(fireBall)); enhancedFireBall.Execute(); Console.WrileLine("_____________________________________"); ISkill iceArrow = new IceArrow(); ISkill aoeIceArrow = new AoEDecorator(new PowerUpDecorator(iceArrow)); aoeIceArrow.Execute(); } }
【设计模式】题目小练1
大飞pkz2025-09-13 15:06
相关推荐
月华路1 天前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制用户938515635071 天前
工厂模式与 Nest.js 核心思想 —— 从蜜雪冰城到企业级架构gugucoding1 天前
47. 【Java】Java内存模型(JMM)与可见性m0_380743871 天前
从零调用 Claude 教程起床学FPGA1 天前
AI回答问题之后,会自动跳到最下面的问题x_x-F1 天前
网络数据从网卡到用户态:一场基于内存所有权转移的接力赛名字还没想好☜1 天前
Java 线上内存泄漏排查实战:jmap 导堆、MAT 找 GC Roots 与四类常见泄漏码匠许师傅1 天前
【C++ 面试真题】聊聊 C++ 的多继承与虚继承我不是疯子是傻子1 天前
Qt CAN通信周期发送抖动?实测定时器精度校准与时间戳补偿方案IT爱学堂1 天前
尚硅谷 - 2025年3月Java+AI大模型应用开发