【设计模式】题目小练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();
    }
}
相关推荐
加号3几秒前
【C#】VS2022 传统 ASP.NET Web 服务(.asmx)接口实现指南
前端·c#·asp.net
是苏浙1 分钟前
Java实现链表2
java·开发语言·数据结构
多彩电脑10 分钟前
Lua基础入门
开发语言·lua
码云骑士11 分钟前
29-Python-logging日志模块-print不是日志的生产级实战
开发语言·python
WWW652616 分钟前
代码随想录 打卡第五十八天
开发语言·c++·算法
少司府21 分钟前
C++基础入门:_stack_queue 底层奥秘
开发语言·数据结构·c++·栈和队列·queue·stack
Cheng小攸26 分钟前
协议分析与分析工具(二)
开发语言·php
z_鑫26 分钟前
深入理解MyBatis:collection集合封装的底层原理与实现细节
java·开发语言·数据库·spring boot·mybatis
贺国亚27 分钟前
06-奢侈零售VIP-Clienteling-Agent
开发语言·python·零售
我命由我1234530 分钟前
Android 开发问题:获取到的 Android ID 发生了变化
android·java·开发语言·java-ee·android studio·android jetpack·android runtime