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;
}
}

最新文章

  1. Yii2-redis
  2. SQL笔记-第六章,索引与约束
  3. 常用的 文件 MIME类型
  4. struts2自己定义拦截器
  5. C#中struct与class的区别详解
  6. win7+IE11 中开发工具报错occurredJSLugin.3005解决办法
  7. JEECG移动解决方案 - 针对移动应用的应用系统转换的中间件解决方案
  8. [js高手之路]面向对象版本匀速运动框架
  9. npm注意事项(附带Vue-cli安装)
  10. java SPI机制
  11. [再寄小读者之数学篇](2014-06-20 Beta 函数)
  12. Verilog风格
  13. (转)MySQL join语法解析与性能分析
  14. Oracle 唯一 约束(unique constraint) 与 索引(index) 关系说明
  15. linux命令学习(4):cd命令
  16. java数组创建
  17. argunlar 1.0.0 【hello,world】
  18. 【转】Redis 总结精讲 看一篇成高手系统-4
  19. jQuery animate() 改变颜色
  20. 【Android】3.16 离线地图功能

热门文章

  1. css实现div水平垂直居中
  2. VMware安装,安装CentOS 6.3 ,安装CentOS 7_1511_mini
  3. linux下mysql5.7的MHA高可用架构搭建
  4. Instr()函数用法
  5. (转) weblogic 12c忘记密码
  6. feign 发送请求时,传多个参数时的写法
  7. python3 + Tensorflow + Faster R-CNN训练自己的数据
  8. SpringMVC POJO传参方式
  9. c++string int转化简单写法
  10. electron-vue ipcRenderer.on() 调用多次