issue #333 factory kit pattern introduced

This commit is contained in:
Kamil Pietruszka
2016-01-17 13:45:33 +01:00
parent bd82387fc1
commit 10bbf988ea
15 changed files with 255 additions and 57 deletions

View File

@@ -0,0 +1,15 @@
package com.iluwatar.factorykit;
public class App {
public static void main(String[] args) {
WeaponFactory factory = WeaponFactory.factory(builder -> {
builder.add(WeaponType.SWORD, Sword::new);
builder.add(WeaponType.AXE, Axe::new);
builder.add(WeaponType.SPEAR, Spear::new);
builder.add(WeaponType.BOW, Bow::new);
});
Weapon axe = factory.create(WeaponType.AXE);
System.out.println(axe);
}
}

View File

@@ -0,0 +1,7 @@
package com.iluwatar.factorykit;
public class Axe implements Weapon {
@Override public String toString() {
return "Axe{}";
}
}

View File

@@ -0,0 +1,7 @@
package com.iluwatar.factorykit;
/**
* Created by crossy on 2016-01-16.
*/
public class Bow implements Weapon {
}

View File

@@ -0,0 +1,7 @@
package com.iluwatar.factorykit;
import java.util.function.Supplier;
public interface Builder {
void add(WeaponType name, Supplier<Weapon> supplier);
}

View File

@@ -0,0 +1,7 @@
package com.iluwatar.factorykit;
public class Spear implements Weapon {
@Override public String toString() {
return "Spear{}";
}
}

View File

@@ -0,0 +1,7 @@
package com.iluwatar.factorykit;
public class Sword implements Weapon {
@Override public String toString() {
return "Sword{}";
}
}

View File

@@ -0,0 +1,4 @@
package com.iluwatar.factorykit;
public interface Weapon {
}

View File

@@ -0,0 +1,16 @@
package com.iluwatar.factorykit;
import java.util.HashMap;
import java.util.function.Consumer;
import java.util.function.Supplier;
public interface WeaponFactory {
Weapon create(WeaponType name);
static WeaponFactory factory(Consumer<Builder> consumer) {
HashMap<WeaponType, Supplier<Weapon>> map = new HashMap<>();
consumer.accept(map::put);
return name -> map.get(name).get();
}
}

View File

@@ -0,0 +1,8 @@
package com.iluwatar.factorykit;
/**
* Created by crossy on 2016-01-16.
*/
public enum WeaponType {
SWORD, AXE, BOW, SPEAR
}