设计模式-抽象工厂模式-java-中文版

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

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

import java.util.Scanner;

/**
 * 魔兽四个种族其实都一个套路!看抽象工厂如何优雅实现
 */
public class 抽象工厂模式主程序 {
    public static void main(String[] args) {
        do {
            Scanner 输入扫描 = new Scanner(System.in);
            for (种族枚举 种族 : 种族枚举.values()) {
                System.out.println(种族.索引 + ":" + 种族.名称);
            }
            System.out.println("请输入一个代表种族的数字:");
            建筑工厂 工厂实例 = null;
            try {
                种族枚举 种族 = 种族枚举.通过索引获取种族(输入扫描.nextInt());
                工厂实例 = 获取建筑工厂(种族);
            } catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("请输入正确的数字!!");
                continue;
            }

            System.out.println("工厂实例.创建兵营() = " + getName(工厂实例.创建兵营()));
            System.out.println("工厂实例.创建祭坛() = " + getName(工厂实例.创建祭坛()));
            System.out.println("工厂实例.创建商店() = " + getName(工厂实例.创建商店()));
            break;
        } while (true);
    }

    public static 建筑工厂 获取建筑工厂(种族枚举 枚举) {
        if (种族枚举.人族.equals(枚举)) {
            return new 人族建筑工厂();
        } else if (种族枚举.兽族.equals(枚举)) {
            return new 兽族建筑工厂();
        } else if (种族枚举.精灵.equals(枚举)) {
            return new 精灵建筑工厂();
        } else if (种族枚举.不死族.equals(枚举)) {
            return new 不死族建筑工厂();
        }

        throw new RuntimeException("不支持类型:" + 枚举);
    }

    private static String getName(Object 对象) {
        return 对象.getClass().getSimpleName();
    }

}

enum 种族枚举 {
    人族(0, "人族"), 精灵(1, "精灵"), 兽族(2, "兽族"), 不死族(3, "不死族");

    Integer 索引;
    String 名称;

    种族枚举(Integer 索引, String 名称) {
        this.索引 = 索引;
        this.名称 = 名称;
    }

    static 种族枚举 通过索引获取种族(Integer 索引) {
        for (种族枚举 value : 种族枚举.values()) {
            if (value.索引.equals(索引)) {
                return value;
            }
        }

        throw new RuntimeException("错误的种族索引:" + 索引);
    }

}

class 兽族建筑工厂 implements 建筑工厂 {
    @Override
    public 祭坛 创建祭坛() {
        return new 兽族祭坛();
    }

    @Override
    public 兵营 创建兵营() {
        return new 兽族兵营();
    }

    @Override
    public 商店 创建商店() {
        return new 兽族商店();
    }
}

class 精灵建筑工厂 implements 建筑工厂 {
    @Override
    public 祭坛 创建祭坛() {
        return new 精灵祭坛();
    }

    @Override
    public 兵营 创建兵营() {
        return new 精灵兵营();
    }

    @Override
    public 商店 创建商店() {
        return new 精灵商店();
    }
}

class 人族建筑工厂 implements 建筑工厂 {
    @Override
    public 祭坛 创建祭坛() {
        return new 人族祭坛();
    }

    @Override
    public 兵营 创建兵营() {
        return new 人族兵营();
    }

    @Override
    public 商店 创建商店() {
        return new 人族商店();
    }
}

class 不死族建筑工厂 implements 建筑工厂 {
    @Override
    public 祭坛 创建祭坛() {
        return new 不死族祭坛();
    }

    @Override
    public 兵营 创建兵营() {
        return new 不死族兵营();
    }

    @Override
    public 商店 创建商店() {
        return new 不死族商店();
    }
}


interface 建筑工厂 {
    祭坛 创建祭坛();

    兵营 创建兵营();

    商店 创建商店();
}

interface 祭坛 {
}

interface 兵营 {
}

interface 商店 {
}

class 人族祭坛 implements 祭坛 {
}

class 兽族祭坛 implements 祭坛 {
}

class 不死族祭坛 implements 祭坛 {
}

class 精灵祭坛 implements 祭坛 {
}

class 人族兵营 implements 兵营 {
}

class 精灵兵营 implements 兵营 {
}

class 不死族兵营 implements 兵营 {
}

class 兽族兵营 implements 兵营 {
}

class 不死族商店 implements 商店 {
}

class 精灵商店 implements 商店 {
}

class 人族商店 implements 商店 {
}

class 兽族商店 implements 商店 {
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值