设计模式-组合模式-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 种族("暗夜精灵",
                new 建筑[]{
                        new 建筑("生命之树", 单位.创建多个("小精灵")),
                        new 建筑("长者祭坛", 单位.创建多个("恶魔猎手", "守望者", "老鹿", "白虎")),
                        new 建筑("战争古树", 单位.创建多个("弓箭手", "女猎手", "投刃车")),
                        new 建筑("知识古树", 单位.创建多个("小鹿", "熊德", "山岭巨人")),
                        new 建筑("风之古树", 单位.创建多个("风德", "精灵龙")),
                        new 建筑("奇美拉栖树", 单位.创建多个("奇美拉"))
                });
        种族.打印();
    }
}


abstract class 单位组 {

    static int 空格个数 = 0;

    public String 生成空格() {
        String 空格 = "";
        for (int i = 0; i < 空格个数; i++) {
            空格 += "   ";
        }
        return 空格;
    }

    protected String 名称;

    public void 增加(单位组 单位组) {
        子节点.add(单位组);
    }

    List<单位组> 子节点 = new ArrayList<>();

    protected void 打印前() {
        System.out.println(生成空格() + 名称 + ":{");
        空格个数++;
    }

    protected void 打印后() {
        空格个数--;
        System.out.println();
        System.out.println(生成空格() + "}");
    }

    protected void 打印() {
        打印前();
        for (单位组 单位组 : 子节点) {
            单位组.打印();
        }
        打印后();
    }
}

class 单位 extends 单位组 {

    public static 单位[] 创建多个(String... 字符串) {
        单位[] 字们 = new 单位[字符串.length];

        for (int i = 0; i < 字符串.length; i++) {
            字们[i] = new 单位(字符串[i]);
        }

        return 字们;
    }

    public 单位(String 名称) {
        this.名称 = 名称;
    }

    @Override
    protected void 打印() {
        System.out.print(生成空格() + 名称 + " ");
    }

    @Override
    protected void 打印前() {
    }

    @Override
    protected void 打印后() {
    }
}

class 建筑 extends 单位组 {


    public 建筑(String 名称, 单位... 单位们) {
        this.名称 = 名称;
        for (单位 单位 : 单位们) {
            this.增加(单位);
        }
    }

}

class 种族 extends 单位组 {

    public 种族(String 名称, 单位组... 词们) {
        this.名称 = 名称;
        for (单位组 单位组 : 词们) {
            this.增加(单位组);
        }
    }

    @Override
    protected void 打印后() {
        System.out.print("\n");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值