【设计模式】题目小练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();
    }
}
相关推荐
就叫飞六吧10 分钟前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
threelab19 分钟前
Three.js 代码云效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
V搜xhliang024628 分钟前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
kaikaile199534 分钟前
风、浪、流环境模型的船舶三自由度(纵荡、横荡、艏摇)运动仿真MATLAB
开发语言·人工智能·matlab
fish_xk35 分钟前
map和set
java·开发语言
李崧正1 小时前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python
老了,不知天命1 小时前
鳶尾花項目JAVA
java·开发语言·机器学习
BIGmustang1 小时前
python练手之用tkinter写一个计算器
开发语言·python
winner88811 小时前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试