设计模式-责任链模式-java-中文版

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

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

import java.util.ArrayList;
import java.util.List;

/**
 * 山丘之王:看我天神下凡的魔免责任链!!!
 */
public class 责任链模式主程序 {
    public static void main(String[] args) {
        //为山丘之王增加所有状态
        魔兽单位 山丘之王 = new 山丘之王();
        for (状态 状态 : 状态.values()) {
            山丘之王.增加状态(状态);
        }

        //山丘之王使用天神下凡解除魔法状态
        System.out.println("山丘之王使用天神下凡!!!!");
        责任链 魔免责任链 = 创建魔免责任链();
        魔免责任链.执行(山丘之王);

        System.out.println("山丘之王天神下凡不能免疫如下状态:");
        山丘之王.获取所有状态().forEach(System.out::println);
    }

    private static 责任链 创建魔免责任链() {
        责任链 责任链 = new 责任链();
        for (状态 状态 : 状态.values()) {
            if (状态.是否为魔法效果()) {
                责任链.增加状态解除器(new 状态解除器实现(状态));
            }
        }
        return 责任链;
    }
}

class 责任链 {
    List<状态解除器> 状态接触器们;

    责任链() {
        状态接触器们 = new ArrayList<>();
    }

    void 增加状态解除器(状态解除器 状态解除器) {
        状态接触器们.add(状态解除器);
    }

    void 执行(魔兽单位 魔兽单位) {
        for (状态解除器 状态解除器 : 状态接触器们) {
            for (状态 状态 : 魔兽单位.获取所有状态()) {
                if (状态解除器.获取可以处理的状态().equals(状态)) {
                    状态解除器.执行(魔兽单位);
                    break;
                }
            }
        }
    }
}

interface 魔兽单位 {
    default void 移除状态(状态 状态) {
        获取所有状态().remove(状态);
        System.out.printf("%s消除了%s状态%n", this.getClass().getSimpleName(), 状态);
    }

    List<状态> 获取所有状态();

    default void 增加状态(状态 状态) {
        获取所有状态().add(状态);
        System.out.printf("%s增加了%s状态%n", this.getClass().getSimpleName(), 状态);
    }
}

class 山丘之王 implements 魔兽单位 {

    List<状态> 所有状态 = new ArrayList<>();

    @Override
    public List<状态> 获取所有状态() {
        return 所有状态;
    }
}

interface 状态解除器 {
    状态 获取可以处理的状态();

    default void 执行(魔兽单位 魔兽单位) {
        魔兽单位.移除状态(获取可以处理的状态());
    }
}

class 状态解除器实现 implements 状态解除器 {
    状态 状态;

    状态解除器实现(状态 状态) {
        this.状态 = 状态;
    }

    @Override
    public 状态 获取可以处理的状态() {
        return this.状态;
    }
}

enum 状态 {
    物理眩晕(false), 魔法眩晕(true), 冰冻(true), 减速(true), 中毒(false), 心灵之火(true), 灵魂锁链(true), 回春术(true), 放逐(true);

    private boolean 魔法效果;

    状态(boolean 魔法效果) {
        this.魔法效果 = 魔法效果;
    }

    public boolean 是否为魔法效果() {
        return 魔法效果;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值