设计模式学习之路(七) ------ 策略模式(Strategy)

理论学习:

  • http://www.uml.org.cn/sjms/201009092.asp
  • http://blog.csdn.net/hguisu/article/details/7558249

UML类图:

        

context:使用策略的类

strategy:策略接口

策略模式与桥接模式是不一样的,策略只是一种计算方式,而不能独立,而桥接模式是两种单独的实例互相使用,像武器都有自己的属性

与状态模式也类似,都有一个拥有着,调用接口方法,(实现不一样),但是策略里面是没有状态变化的

原型实现:

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;

public class DM03Strategy:MonoBehaviour
{
    void Start()
    {
        StrategyContext context = new StrategyContext();
        context.stragegy = new ConcreteStrategyB(); //可用不同的策略赋值

        context.Cal(); //根据不同的策略调用不同的实践

    }
}
/// <summary>
/// 策略的拥有者
/// </summary>
public class StrategyContext
{
    public IStrategy stragegy;
    public void Cal()
    {
        stragegy.Cal();
    }
}
/// <summary>
/// 策略接口
/// </summary>
public interface IStrategy
{
    void Cal();
}
public class ConcreteStrategyA : IStrategy
{

    public void Cal()
    {
        Debug.Log("使用A策略计算");
    }
}
public class ConcreteStrategyB : IStrategy
{

    public void Cal()
    {
        Debug.Log("使用B策略计算");
    }
}

实例:

     敌人和战士的攻击策略模式实现:

public interface IAttrStrategy
{
    int GetExtraHPValue(int lv); //获取最大血量
    int GetDmgDescValue(int lv); //减免伤害 lv:等级
    int GetCritDmg( float critRate ); //暴击伤害计算
}
public class EnemyAttrStrategy:IAttrStrategy  //敌人计算策略
{
    public int GetExtraHPValue(int lv)
    {
        return 0;
    }

    public int GetDmgDescValue(int lv)
    {
        return 0;
    }

    public int GetCritDmg(float critRate)
    {
        if (UnityEngine.Random.Range(0, 1f) < critRate)
        {
            return (int)(10 * UnityEngine.Random.Range(0.5f, 1f));
        }
        return 0;
    }
}
public class SoldierAttrStrategy:IAttrStrategy  //战士计算策略
{
    public int GetExtraHPValue(int lv)
    {
        return (lv - 1) * 10;
    }

    public int GetDmgDescValue(int lv)
    {
        return (lv - 1) * 5;
    }

    public int GetCritDmg(float critRate)
    {
        return 0;
    }
}








猜你喜欢

转载自blog.csdn.net/dengshunhao/article/details/80795379