走进设计模式的世界1:剑与魔法-策略模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35165632/article/details/83537627

策略模式 :

定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

解释:该模式将基类对象的公共行为,封装起来变成类对象的某个属性,通过调用属性的固定方法,和动态设置类对象的属性,动态的使用类被封装起来的不同行为。设计模式关键字:XXXBehavior (XXX 行为)

策略模式样例演示:剑与魔法的世界。

/**
    这是一套动作冒险游戏初始的设计
    每个角色都只能佩戴自己的武器
    进行自己独有的攻击方式
**/
// 角色类基类
public class CharacterOld{
    fight(){
    }
}

// 皇后类
public class QueenOld extends CharacterOld{
    fight(){
      //皇后用法杖
    }
}

// 皇帝类
public class KingOld extends CharacterOld{
    fight(){
       //皇帝用宝剑
    }
}

// 骑士类
public class KnightOld extends CharacterOld{
    fight(){
        //骑士用枪
    }
}

在发展的过程中,游戏的运营人员发现这样的角色过于单一,无法搭配天赋系统发挥各个武器的长处,可玩性不足。所以下达需求需要不同的角色也可以用不同的武器进行攻击,可以让玩家自行选择。所以就引出了策略模式的使用方式。

代码如下:

/**
 
 角色的基类
 设计将武器攻击的行为进行封装
 角色进行攻击时可以不关注武器的攻击是如何实现的,
 只要知道自己拿了什么武器,要进行攻击就可以了。
 所以就算进行武器的切换,也不要二次的开发。
 即角色has用武器攻击的行为,角色not is可以攻击的类。
 
**/
public class Character{
    
    // 封装武器攻击行为的接口
    WeaponBehavior weapon;
    
    // 无参的构造方法,初始化时,如果不佩戴武器则为空手攻击
    public Character(){
        this.weapon = new HandBehavior();
    }

    // 有参的构造方法,初始化时,可以对角色佩戴武器
    public Character(WeaponBehavior weapon){
        this.weapon = weapon;
    }
    
    // 角色的攻击方法,根据所佩戴的武器自动匹配
    private fight(){
       // 用武器攻击
       weapon.useWeapon();
    }
    
    // 通过对封装行为的重新设置,可以改变角色的攻击方式
    private setWeapon(WeaponBehavior weapon){
       // 动态的设置角色的武器
       this.weapon = weapon;
    }

}


/**

    皇后的继承类

**/
public class Queen extends Character{
    // 皇后自己的行为
    queenDo();
}

/**

    皇帝的继承类

**/
public class King extends Character{
    // 皇帝自己的行为
    kingDo();
}

/**

    骑士的继承类

**/
public class Knight extends Character{
    // 骑士自己的行为
    knightDo();
}



/**

    对武器攻击行为进行封装的接口

**/
public interface WeaponBehavior{
    // 使用武器进行攻击
    useWeapon();
}

/**

    用手攻击的实现类

**/
public class HandBehavior() implements WeaponBehavior{
    @overload
    public useWeapon(){
        // 用手攻击的实现
    }
}

/**

    用弓箭攻击的实现类

**/
public class BowAndArrowBehavior() implements WeaponBehavior{
    @overload
    public useWeapon(){
        // 用弓箭攻击的实现
    }
}

/**

    用斧头攻击的实现类

**/
public class AxeBehavior() implements WeaponBehavior{
    @overload
    public useWeapon(){
        // 用斧头攻击的实现
    }
}

以上就是通过使用策略模式对剑与魔法的世界进行的二次设计,保证可以复用不同武器的攻击方式,又可以动态的设置不同角色使用的武器和攻击方式,大大减少了将来进行扩展的难度。至于一些小问题,会在以后的设计模式中进行解决。

猜你喜欢

转载自blog.csdn.net/qq_35165632/article/details/83537627
今日推荐