【设计模式】题目小练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();
    }
}
相关推荐
༄沐࿆风࿆࿆1 小时前
JavaScript函数完全指南:从基础语法到闭包原理与应用实战
开发语言·javascript
医疗信息化王工1 小时前
从零到一:基于 GGUF 格式部署 Unlimited-OCR 搭建企业级证件识别服务
图像处理·c#·ocr
饼干哥哥1 小时前
Openclaw已死?任何Agent都能用Cli实现AI自主运营跨境电商
设计模式·openai·ai编程
KobeSacre1 小时前
DelayQueue 源码
java·开发语言
han_hanker1 小时前
重新认识枚举enum
开发语言
zyh______2 小时前
C#语法糖(按照实用性排序)
unity·c#
鹏易灵2 小时前
C++——8.移动语义初探(移动构造、移动赋值)
开发语言·c++·php
2601_962341302 小时前
计算机毕业设计之jsp考研在线复习平台
java·大数据·开发语言·hadoop·python·考研·课程设计
凯瑟琳.奥古斯特2 小时前
力扣1008:前序重建BST
开发语言·c++·算法·leetcode·职场和发展
2zcode3 小时前
项目文档:基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab