added builder sample
This commit is contained in:
		
							
								
								
									
										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;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user