设计模式-(策略模式)

策略模式定义了一组算法并封装,使得它们可以在客户端互换使用,提高了代码的灵活性。在植物大战僵尸游戏中,通过策略模式实现了豌豆射手的不同攻击策略,如普通子弹和火焰子弹,每种策略代表不同的伤害值。这种模式将复杂计算逻辑从客户端剥离,便于维护和选择合适的算法策略。
摘要由CSDN通过智能技术生成

定义

定义一组算法,并封装每个算法,让他们可以彼此交换使用。策略模式让这些算法在客户端使用它们能更加独立。

组成部分

Strategy(策略接口类)
提供“策略客户端”可以使用的方法
ConcreteStretegyA-ConcreteStretegyC(策略实现类)
不同算法的实现
Context(策略客户端)
拥有一个Strategy类的对象引用,并通过对象引用获取想要的计算结果。

游戏应用

在设计植物大战僵尸的植物攻击时,豌豆射手攻击时候可以分为普通子弹攻击,火焰子弹攻击,而这些攻击的伤害却是不同的。
Strategy

public abstract class BulletStrategy
{
    //获取伤害
    public abstract int GetAttackValue();
}

ConcreteStretegy

//普通子弹
public class ConcreteStretegyA : BulletStrategy
{
    public override int GetAttackValue()
    {
        return 1;
    }
}
//火焰子弹
public class ConcreteStretegyB : BulletStrategy
{
    public override int GetAttackValue()
    {
        return 2;
    }
}

Context

public class BulletContext
{
    public BulletStrategy bulletStrategy;

    public void SetBulletStrategy(BulletStrategy bulletStrategy)
    {
        this.bulletStrategy = bulletStrategy;
    }

    public int GetAttackValue()
    {
        return bulletStrategy.GetAttackValue(); 
    }
}

优缺点

将复杂的公式计算从客户端中独立出来成为一个群组,之后客户端可以按照情况来决定使用的计算公式策略,提高系统的灵活纯度,也强化系统对所有计算策略的维护方式。这个和之前提的状态模式有些相同,不过状态是在一组状态中切换状态,状态之间由对应和链接的关系,strategy是一群没有任何关系的类所组成,不知彼此的存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值