设计模式-原型模式-java-中文版

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

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

/**
 * 根据原型创建狮鹫!!!
 */
public class 原型模式主程序 {
    public static void main(String[] args) {
        工厂接口 工厂接口 = new 工厂实现(new 人族战士(), new 人族法师(), new 人族飞行兵());
        System.out.println("工厂.创建战士() = " + 工厂接口.创建战士());
        System.out.println("工厂.创建法师() = " + 工厂接口.创建法师());
        System.out.println("工厂.创建飞行兵() = " + 工厂接口.创建飞行兵());

        工厂接口 = new 工厂实现(new 兽族战士(), new 兽族法师(), new 兽族飞行兵());
        System.out.println("工厂.创建战士() = " + 工厂接口.创建战士());
        System.out.println("工厂.创建法师() = " + 工厂接口.创建法师());
        System.out.println("工厂.创建飞行兵() = " + 工厂接口.创建飞行兵());
    }
}

interface 工厂接口 {
    战士 创建战士();

    法师 创建法师();

    飞行兵 创建飞行兵();
}

class 工厂实现 implements 工厂接口 {

    private 战士 战士;

    private 法师 法师;

    private 飞行兵 飞行兵;

    工厂实现(战士 战士, 法师 法师, 飞行兵 飞行兵) {
        this.战士 = 战士;
        this.法师 = 法师;
        this.飞行兵 = 飞行兵;
    }

    @Override
    public 战士 创建战士() {
        return 战士.复制();
    }

    @Override
    public 法师 创建法师() {
        return 法师.复制();
    }

    @Override
    public 飞行兵 创建飞行兵() {
        return 飞行兵.复制();
    }
}

abstract class 战士 extends 原型接口<战士> {
    abstract String 获取名称();
}

abstract class 法师 extends 原型接口<法师> {
    abstract String 获取名称();
}

abstract class 飞行兵 extends 原型接口<飞行兵> {
    abstract String 获取名称();
}

class 人族战士 extends 战士 {
    @Override
    String 获取名称() {
        return "人族步兵";
    }
}

class 兽族战士 extends 战士 {
    @Override
    String 获取名称() {
        return "手足步兵";
    }
}

class 人族法师 extends 法师 {
    @Override
    String 获取名称() {
        return "女巫";
    }
}

class 兽族法师 extends 法师 {
    @Override
    String 获取名称() {
        return "萨满";
    }
}

class 兽族飞行兵 extends 飞行兵 {
    @Override
    String 获取名称() {
        return "飞龙";
    }
}

class 人族飞行兵 extends 飞行兵 {
    @Override
    String 获取名称() {
        return "狮鹫";
    }
}

abstract class 原型接口<T> implements Cloneable {
    public T 复制() {
        try {
            return (T) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new RuntimeException(e);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值