java设计模式--策略模式

看了网上一些java设计模式的资料,http://blog.csdn.net/lmj623565791/article/details/24116745这位大神写的挺好,根据

策略模式的实现步骤:

1.  变化的方法抽象为行为接口

2.  对每个行为接口定义一些具体的实现类

3.  定义一个对象的抽象类,在类中声明各个行为接口

4.  在抽象类中定义各个行为的set方法

5.  调用各个行为接口的方法来定义抽象类中的方法


根据大神的例子简单的写了下:

假设公司需要做一款武侠游戏,我们就是负责游戏的角色模块,需求是这样的:每个角色对应一个名字,每类角色对应一种样子,每个角色拥有一个攻击、防御的技能。

1.  按照上面总结的第一步,把方法抽象为行为接口:

package design.strategy.behavior;

public interface IAttackBehavior {
    void attack();
}


package design.strategy.behavior;

public interface IDefendBehavior {
    void defend();
}
2.  定义攻击和防御行为接口具体实现类

攻击行为的实现:AttackA,AttackB

package design.strategy.behaviorimp;

import design.strategy.behavior.IAttackBehavior;

public class AttackA implements IAttackBehavior {

    @Override
    public void attack() {
        System.out.println("gun");
    }
}

package design.strategy.behaviorimp;

import design.strategy.behavior.IAttackBehavior;

public class AttackB implements IAttackBehavior {
    @Override
    public void attack() {
        System.out.println("knife");
    }
}
防御行为的实现:DefendA,DefendB

package design.strategy.behaviorimp;

import design.strategy.behavior.IDefendBehavior;

public class DefendA implements IDefendBehavior {
    @Override
    public void defend() {
        System.out.println("defend A");
    }
}

package design.strategy.behaviorimp;

import design.strategy.behavior.IDefendBehavior;

public class DefendB implements IDefendBehavior {
    @Override
    public void defend() {
        System.out.println("defend B");
    }
}

3.  定义一个角色的抽象类,声明Attack和Defend行为接口,定义方法

package design.strategy;

import design.strategy.behavior.IAttackBehavior;
import design.strategy.behavior.IDefendBehavior;

public abstract class Role {
    public String name;    //声明名字区别角色
    public IAttackBehavior attackBehavior;    //声明攻击行为接口
    public IDefendBehavior defendBehavior;    //声明防御行为接口

    //定义攻击行为的set方法
    public void setAttackBehavior(IAttackBehavior attackBehavior) {
        this.attackBehavior = attackBehavior;
    }

    //定义防御行为的set方法
    public void setDefendBehavior(IDefendBehavior defendBehavior) {
        this.defendBehavior = defendBehavior;
    }

    //通过调用Attack行为接口的attack方法来定义抽象类中的方法
    public void attack() {
        attackBehavior.attack();
    }

    //通过调用Defend行为接口的defend方法来定义抽象类中的方法
    public void defend() {
        defendBehavior.defend();
    }
}

 

4.  定义一个Role类继承抽象类
package design.strategy;

public class PlayRole extends Role {

    public PlayRole(String name) {
        this.name = name;
    }
}

5.  测试  

package design.strategy;

import design.strategy.behaviorimp.AttackA;
import design.strategy.behaviorimp.DefendA;

public class Test {
    public static void main(String[] args) {
        Role roleA = new PlayRole("A");
        roleA.setAttackBehavior(new AttackA());
        roleA.setDefendBehavior(new DefendA());

        System.out.println(roleA.name);
        roleA.attack();
        roleA.defend();
    }
}

输出:

A
gun
defend A









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值