added builder sample
This commit is contained in:
parent
959a1f63ba
commit
a4b58fe06e
23
builder/pom.xml
Normal file
23
builder/pom.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.iluwatar</groupId>
|
||||||
|
<artifactId>java-design-patterns</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<groupId>com.iluwatar</groupId>
|
||||||
|
<artifactId>builder</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<name>builder</name>
|
||||||
|
<url>http://maven.apache.org</url>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
31
builder/src/main/java/com/iluwatar/App.java
Normal file
31
builder/src/main/java/com/iluwatar/App.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
import com.iluwatar.Hero.HeroBuilder;
|
||||||
|
|
||||||
|
public class App
|
||||||
|
{
|
||||||
|
public static void main( String[] args )
|
||||||
|
{
|
||||||
|
|
||||||
|
Hero mage = new HeroBuilder(Profession.MAGE, "Riobard")
|
||||||
|
.withHairColor(HairColor.BLACK)
|
||||||
|
.withWeapon(Weapon.DAGGER)
|
||||||
|
.build();
|
||||||
|
System.out.println(mage);
|
||||||
|
|
||||||
|
Hero warrior = new HeroBuilder(Profession.WARRIOR, "Amberjill")
|
||||||
|
.withHairColor(HairColor.BLOND)
|
||||||
|
.withHairType(HairType.LONG_CURLY)
|
||||||
|
.withArmor(Armor.CHAIN_MAIL)
|
||||||
|
.withWeapon(Weapon.SWORD)
|
||||||
|
.build();
|
||||||
|
System.out.println(warrior);
|
||||||
|
|
||||||
|
Hero thief = new HeroBuilder(Profession.THIEF, "Desmond")
|
||||||
|
.withHairType(HairType.BOLD)
|
||||||
|
.withWeapon(Weapon.BOW)
|
||||||
|
.build();
|
||||||
|
System.out.println(thief);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
19
builder/src/main/java/com/iluwatar/Armor.java
Normal file
19
builder/src/main/java/com/iluwatar/Armor.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
public enum Armor {
|
||||||
|
|
||||||
|
CLOTHES, LEATHER, CHAIN_MAIL, PLATE_MAIL;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
String s = "";
|
||||||
|
switch(this) {
|
||||||
|
case CLOTHES: s = "clothes"; break;
|
||||||
|
case LEATHER: s = "leather armor"; break;
|
||||||
|
case CHAIN_MAIL: s = "chain mail"; break;
|
||||||
|
case PLATE_MAIL: s = "plate mail"; break;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
20
builder/src/main/java/com/iluwatar/HairColor.java
Normal file
20
builder/src/main/java/com/iluwatar/HairColor.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
public enum HairColor {
|
||||||
|
|
||||||
|
WHITE, BLOND, RED, BROWN, BLACK;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
String s = "";
|
||||||
|
switch(this) {
|
||||||
|
case WHITE: s = "white"; break;
|
||||||
|
case BLOND: s = "blond"; break;
|
||||||
|
case RED: s = "red"; break;
|
||||||
|
case BROWN: s = "brown"; break;
|
||||||
|
case BLACK: s = "black"; break;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
20
builder/src/main/java/com/iluwatar/HairType.java
Normal file
20
builder/src/main/java/com/iluwatar/HairType.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
public enum HairType {
|
||||||
|
|
||||||
|
BOLD, SHORT, CURLY, LONG_STRAIGHT, LONG_CURLY;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
String s = "";
|
||||||
|
switch(this) {
|
||||||
|
case BOLD: s = "bold"; break;
|
||||||
|
case SHORT: s = "short"; break;
|
||||||
|
case CURLY: s = "curly"; break;
|
||||||
|
case LONG_STRAIGHT: s = "long straight"; break;
|
||||||
|
case LONG_CURLY: s = "long curly"; break;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
119
builder/src/main/java/com/iluwatar/Hero.java
Normal file
119
builder/src/main/java/com/iluwatar/Hero.java
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
public class Hero {
|
||||||
|
|
||||||
|
private final Profession profession;
|
||||||
|
private final String name;
|
||||||
|
private final HairType hairType;
|
||||||
|
private final HairColor hairColor;
|
||||||
|
private final Armor armor;
|
||||||
|
private final Weapon weapon;
|
||||||
|
|
||||||
|
public Profession getProfession() {
|
||||||
|
return profession;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HairType getHairType() {
|
||||||
|
return hairType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HairColor getHairColor() {
|
||||||
|
return hairColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Armor getArmor() {
|
||||||
|
return armor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Weapon getWeapon() {
|
||||||
|
return weapon;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append(profession);
|
||||||
|
sb.append(" named ");
|
||||||
|
sb.append(name);
|
||||||
|
if (hairColor != null || hairType != null) {
|
||||||
|
sb.append(" with ");
|
||||||
|
if (hairColor != null) {
|
||||||
|
sb.append(hairColor);
|
||||||
|
sb.append(" ");
|
||||||
|
}
|
||||||
|
if (hairType != null) {
|
||||||
|
sb.append(hairType);
|
||||||
|
sb.append(" ");
|
||||||
|
}
|
||||||
|
sb.append(hairType != HairType.BOLD ? "hair" : "head");
|
||||||
|
}
|
||||||
|
if (armor != null) {
|
||||||
|
sb.append(" wearing ");
|
||||||
|
sb.append(armor);
|
||||||
|
}
|
||||||
|
if (weapon != null) {
|
||||||
|
sb.append(" and wielding ");
|
||||||
|
sb.append(weapon);
|
||||||
|
}
|
||||||
|
sb.append(".");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Hero(HeroBuilder builder) {
|
||||||
|
this.profession = builder.profession;
|
||||||
|
this.name = builder.name;
|
||||||
|
this.hairColor = builder.hairColor;
|
||||||
|
this.hairType = builder.hairType;
|
||||||
|
this.weapon = builder.weapon;
|
||||||
|
this.armor = builder.armor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class HeroBuilder {
|
||||||
|
|
||||||
|
private final Profession profession;
|
||||||
|
private final String name;
|
||||||
|
private HairType hairType;
|
||||||
|
private HairColor hairColor;
|
||||||
|
private Armor armor;
|
||||||
|
private Weapon weapon;
|
||||||
|
|
||||||
|
public HeroBuilder(Profession profession, String name) {
|
||||||
|
if (profession == null || name == null) {
|
||||||
|
throw new NullPointerException("profession and name can not be null");
|
||||||
|
}
|
||||||
|
this.profession = profession;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HeroBuilder withHairType(HairType hairType) {
|
||||||
|
this.hairType = hairType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HeroBuilder withHairColor(HairColor hairColor) {
|
||||||
|
this.hairColor = hairColor;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HeroBuilder withArmor(Armor armor) {
|
||||||
|
this.armor = armor;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HeroBuilder withWeapon(Weapon weapon) {
|
||||||
|
this.weapon = weapon;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Hero build() {
|
||||||
|
return new Hero(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
19
builder/src/main/java/com/iluwatar/Profession.java
Normal file
19
builder/src/main/java/com/iluwatar/Profession.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
public enum Profession {
|
||||||
|
|
||||||
|
WARRIOR, THIEF, MAGE, PRIEST;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
String s = "";
|
||||||
|
switch(this) {
|
||||||
|
case WARRIOR: s = "Warrior"; break;
|
||||||
|
case THIEF: s = "Thief"; break;
|
||||||
|
case MAGE: s = "Mage"; break;
|
||||||
|
case PRIEST: s = "Priest"; break;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
20
builder/src/main/java/com/iluwatar/Weapon.java
Normal file
20
builder/src/main/java/com/iluwatar/Weapon.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package com.iluwatar;
|
||||||
|
|
||||||
|
public enum Weapon {
|
||||||
|
|
||||||
|
DAGGER, SWORD, AXE, WARHAMMER, BOW;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
String s = "";
|
||||||
|
switch(this) {
|
||||||
|
case DAGGER: s = "dagger"; break;
|
||||||
|
case SWORD: s = "sword"; break;
|
||||||
|
case AXE: s = "axe"; break;
|
||||||
|
case WARHAMMER: s = "warhammer"; break;
|
||||||
|
case BOW: s = "bow"; break;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user