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