码迷,mamicode.com
首页 > 其他好文 > 详细

Factory Kit【其他模式】

时间:2019-01-05 12:17:07      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:其他   als   add   oid   java   string   ring   独立   sse   

Factory Kit

public class FactoryKit {
    /**
     * Factory Kit:它定义了一个包含不可变内容的工厂,并使用独立的构建器和工厂接口来处理对象的创建。
     */
    @Test
    public void all() {
        final WeaponFactory weaponFactory = WeaponFactory.factory(builder->{
            builder.add(WeaponType.SWORD, Sword::new);
            builder.add(WeaponType.AXE, Axe::new);
        });
        final Weapon weapon = weaponFactory.create(WeaponType.SWORD);
        assertEquals(Sword.SWORD, weapon.getName());
    }
}

enum WeaponType {
    SWORD, AXE
}

interface Weapon {
    String getName();
}

interface Builder {
    void add(WeaponType name, Supplier<Weapon> supplier);
}

interface WeaponFactory {
    Weapon create(WeaponType name);

    static WeaponFactory factory(Consumer<Builder> consumer) {
        final Map<WeaponType, Supplier<Weapon>> map = new HashMap<>();
        consumer.accept(map::put);
        return name -> map.get(name).get();
    }
}

class Axe implements Weapon {
    public static final String AXE = "Axe";

    @Override
    public String getName() {
        return AXE;
    }
}

class Sword implements Weapon {
    public static final String SWORD = "Sword";

    @Override
    public String getName() {
        return SWORD;
    }
}

Factory Kit【其他模式】

标签:其他   als   add   oid   java   string   ring   独立   sse   

原文地址:https://www.cnblogs.com/zhuxudong/p/10223691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!