首先看一下UML图:
我们从上往下一个一个实现:
public interface Human
{
public void getColor();
public void talk();
public void getSex();
}
public abstract class AbstractWhiteHuman implements Human {
@Override
public void getColor() {
System.out.println("白色");
}
@Override
public void talk() {
System.out.println("我是白人");
}
}
public abstract class AbstractYelloHuman implements Human {
@Override
public void getColor() {
System.out.println("黄色");
}
@Override
public void talk() {
System.out.println("我是黄种人");
}
}
public class FemaleWhiteHuman extends AbstractWhiteHuman {
@Override
public void getSex() {
System.out.println("白人女性");
}
}
public class FemaleYellowHuman extends AbstractYelloHuman {
@Override
public void getSex() {
System.out.println("黄种人女性");
}
}
public class MaleWhiteHuman extends AbstractWhiteHuman
{
@Override
public void getSex() {
System.out.println("白人男性");
}
}
public class MaleYelloHuman extends AbstractYelloHuman {
@Override
public void getSex() {
System.out.println("黄种人男性");
}
}
public interface HumanFactory
{
public Human createWhiteHuman();
public Human createYellowHuman();
}
public class MaleHumanFactory implements HumanFactory
{
@Override
public Human createWhiteHuman() {
return new MaleWhiteHuman();
}
@Override
public Human createYellowHuman() {
return new MaleYelloHuman();
}
}
public class FemaleHumanFactory implements HumanFactory {
@Override
public Human createWhiteHuman() {
return new FemaleWhiteHuman();
}
@Override
public Human createYellowHuman() {
return new FemaleYellowHuman();
}
}