//@clashbyte
class Main {
public static void main(String[] args) {
BlackMan black = new BlackMan();
black.makeHead().drawHead(); //Black Head
black.makeBody().drawBody(); //Black Body
black.makeLegs().drawLegs(); //Black Legs
}
}
/*
----------------------
Factories
----------------------
*/
abstract class HumanFactory {
abstract Head makeHead();
abstract Body makeBody();
abstract Legs makeLegs();
}
//Black Man
class BlackMan extends HumanFactory{
@Override
public Head makeHead() {
return new BlackHead();
}
@Override
public Body makeBody() {
return new BlackBody();
}
@Override
public Legs makeLegs() {
return new BlackLegs();
}
}
// Brown Man
class BrownMan extends HumanFactory {
@Override
public Head makeHead() {
return new BrownHead();
}
@Override
public Body makeBody() {
return new BrownBody();
}
@Override
public Legs makeLegs() {
return new BrownLegs();
}
}
// White Man
class WhiteMan extends HumanFactory{
@Override
public Head makeHead() {
return new WhiteHead();
}
@Override
public Body makeBody() {
return new WhiteBody();
}
@Override
public Legs makeLegs() {
return new WhiteLegs();
}
}
/*
----------------------
Interfaces
----------------------
*/
interface Head {
void drawHead();
}
interface Body {
void drawBody();
}
interface Legs {
void drawLegs();
}
/*
----------------------
Heads
----------------------
*/
class BlackHead implements Head {
@Override
public void drawHead() {
System.out.println("Black Head");
}
}
class BrownHead implements Head {
@Override
public void drawHead() {
System.out.println("Brown Head");
}
}
class WhiteHead implements Head {
@Override
public void drawHead() {
System.out.println("White Head");
}
}
/*
----------------------
Bodies
----------------------
*/
class BlackBody implements Body {
@Override
public void drawBody() {
System.out.println("Black Body");
}
}
class BrownBody implements Body {
@Override
public void drawBody() {
System.out.println("Brown Body");
}
}
class WhiteBody implements Body {
@Override
public void drawBody() {
System.out.println("White Body");
}
}
/*
----------------------
Legs
----------------------
*/
class BlackLegs implements Legs {
@Override
public void drawLegs() {
System.out.println("Black Legs");
}
}
class BrownLegs implements Legs {
@Override
public void drawLegs() {
System.out.println("Brown Legs");
}
}
class WhiteLegs implements Legs {
@Override
public void drawLegs() {
System.out.println("White Legs");
}
}