【设计模式】题目小练1

// 题1. 网络游戏技能系统

// 某 RPG 游戏里,角色技能既有基础效果(如火球术、冰箭),又可以叠加各种修饰(如强化版、带毒、范围伤害)。

// 要求:

// 基础技能可独立存在。

// 可以在运行时动态地给技能添加修饰。

// 修饰的顺序会影响最终效果。

cs 复制代码
public 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();
    }
}
相关推荐
2501_930707781 小时前
使用C#代码在 PowerPoint 中组合或取消组合形状
开发语言·c#
晚烛1 小时前
CANN 调试工具与性能剖析:从日志分析到 NPU 行为追踪的完整调试体系
开发语言·windows·python·深度学习·缓存
惊鸿一博2 小时前
图标加载方式_zeroIcon_是否加前缀mdi
开发语言·前端·javascript
森G2 小时前
TypeScript 基础类型
开发语言·typescript
huipeng9263 小时前
企业级微服务开发实战(一):项目启动与工程化设计
java·开发语言·spring boot·spring cloud·微服务·云原生·架构
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 小时前
java实现excel导入、下载模板方法
java·开发语言·excel
眠りたいです3 小时前
现代C++:C++14中的新语言特性和库特性
c语言·开发语言·c++
叶小鸡4 小时前
Java 篇-项目实战-AI 天机学堂(从 0 到 1)-day1
java·开发语言
楼田莉子6 小时前
C++17新特性:__had_include/属性/求值顺序规则
开发语言·c++·后端
香蕉鼠片6 小时前
Python进阶学习
开发语言·python