Factory Kit【其他模式】
2024-09-05 18:07:37
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;
}
}
最新文章
- Yii2-redis
- SQL笔记-第六章,索引与约束
- 常用的 文件 MIME类型
- struts2自己定义拦截器
- C#中struct与class的区别详解
- win7+IE11 中开发工具报错occurredJSLugin.3005解决办法
- JEECG移动解决方案 - 针对移动应用的应用系统转换的中间件解决方案
- [js高手之路]面向对象版本匀速运动框架
- npm注意事项(附带Vue-cli安装)
- java SPI机制
- [再寄小读者之数学篇](2014-06-20 Beta 函数)
- Verilog风格
- (转)MySQL join语法解析与性能分析
- Oracle 唯一 约束(unique constraint) 与 索引(index) 关系说明
- linux命令学习(4):cd命令
- java数组创建
- argunlar 1.0.0 【hello,world】
- 【转】Redis 总结精讲 看一篇成高手系统-4
- jQuery animate() 改变颜色
- 【Android】3.16 离线地图功能
热门文章
- css实现div水平垂直居中
- VMware安装,安装CentOS 6.3 ,安装CentOS 7_1511_mini
- linux下mysql5.7的MHA高可用架构搭建
- Instr()函数用法
- (转) weblogic 12c忘记密码
- feign 发送请求时,传多个参数时的写法
- python3 + Tensorflow + Faster R-CNN训练自己的数据
- SpringMVC POJO传参方式
- c++string int转化简单写法
- electron-vue ipcRenderer.on() 调用多次