设计模式-策略模式-java-中文版

码上见分晓!
中文版本的设计模式详解,案例中的代码尽量使用了中文.
以游戏和生活中较好理解的场景讲解设计模式的实际用法,便于理解吸收,让设计模式的学习不再困难!!!
更多设计模式欢迎来到我的开源项目设计模式中文版

https://gitee.com/nightrunner/chinese-version-of-design-patterns

/**
 * 伊利丹:你们这是自寻死路!!!
 * you are not prepared!!!
 * <p>
 * PS:恶魔猎手有多重攻击策略,当然这取决与是否带了法球和是否变身
 */
public class 策略模式主程序 {
    public static void main(String[] args) {
        恶魔猎手 恶魔猎手 = new 恶魔猎手();
        人族步兵 人族步兵 = new 人族步兵();
        恶魔猎手.攻击(人族步兵);
        人族步兵.攻击(恶魔猎手);

        恶魔猎手.设置攻击策略(new 远程法球攻击策略());
        人族狮鹫 人族狮鹫 = new 人族狮鹫();
        恶魔猎手.攻击(人族狮鹫);
        人族狮鹫.攻击(恶魔猎手);

        恶魔猎手.设置攻击策略(new 远程混乱攻击策略());
        大法师 大法师 = new 大法师();
        恶魔猎手.攻击(大法师);
        大法师.攻击(恶魔猎手);
    }
}

abstract class 魔兽兵种单位接口 {
    魔兽兵种单位接口(攻击策略 攻击策略) {
        this.攻击策略 = 攻击策略;
    }

    攻击策略 攻击策略;

    void 设置攻击策略(攻击策略 攻击策略) {
        this.攻击策略 = 攻击策略;
    }

    void 攻击(魔兽兵种单位接口 被攻击单位) {
        攻击策略.攻击(this, 被攻击单位);
    }
}

class 大法师 extends 魔兽兵种单位接口 {
    大法师() {
        super(new 远程法球攻击策略());
    }
}

class 人族步兵 extends 魔兽兵种单位接口 {
    人族步兵() {
        super(new 近战攻击策略());
    }
}

class 人族狮鹫 extends 魔兽兵种单位接口 {
    public 人族狮鹫() {
        super(new 远程攻击策略());
    }
}

class 恶魔猎手 extends 魔兽兵种单位接口 {

    public 恶魔猎手() {
        super(new 近战攻击策略());
    }

}

interface 攻击策略 {
    default void 攻击(魔兽兵种单位接口 攻击单位, 魔兽兵种单位接口 被攻击单位) {
        System.out.printf("[%s]使用了[%s]攻击了[%s]%n", 攻击单位.getClass().getSimpleName(), this.getClass().getSimpleName(),
                被攻击单位.getClass().getSimpleName());
    }
}

class 近战攻击策略 implements 攻击策略 {
}

class 远程攻击策略 implements 攻击策略 {
}

class 远程法球攻击策略 implements 攻击策略 {
}

class 远程混乱攻击策略 implements 攻击策略 {
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值