zoukankan      html  css  js  c++  java
  • Factory Kit【其他模式】

    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;
        }
    }
    
    
  • 相关阅读:
    2016孤独重视
    什么时候有空写一篇影评 《含泪活着》
    登录页面总结
    心跳机制
    心跳机制详解
    mysql数据库字符编码修改
    mysql20170404代码实现
    2017全面JAVA面试经历总结
    Oracle经典入门教程
    MySQL基础教程-绝对推荐
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10223691.html
Copyright © 2011-2022 走看看