场景:女娲造人
抽象工厂模式
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类
场景问题解决类图:
主要涉及如下几个角色:
1.人种接口
2.白色人种
3.黄色人种
4.黑色人种
5.黄色女性人种、黑色女性人种、白色女性人种
6.黄色男性人种、黑色男性人种、白色男性人种
7.人种生成工厂接口
8.女性生成工厂
9.男性生成工厂
10.场景类
代码实现:
IHuman:
public interface Human {
public void getColor();
public void talk();
public void getSex();
}
AbstractYellowHuman:
public abstract class AbstractYellowHuman implements Human{
public void talk() {
}
public void getColor() {
}
}
AbstractWhiteHuman:
public abstract class AbstractWhiteHuman implements Human {
public void talk() {
System.out.println("the white people speak english!");
}
public void getColor() {
System.out.println("the white people skin is white!");
}
}
AbstractBlackHuman:
public abstract class AbstractBlackHuman implements Human {
public void talk() {
}
public void getColor() {
}
}
FemalYellowHuman:
public class FemaleYellowHuman extends AbstractYellowHuman{
public void getSex() {
}
}
MaleYellowHuman:
public class MaleYellowHuman extends AbstractYellowHuman{
public void getSex() {
// TODO Auto-generated method stub
}
}
HumanFactory:
public interface HumanFactory {
public Human createYellowHuman();
public Human createBlackHuman();
public Human createWhiteHuman();
}
FemaleFactory:
public class FemaleFactory implements HumanFactory{
public Human createYellowHuman() {
return new FemaleYellowHuman();
}
public Human createBlackHuman() {
return new FemaleBlackHuman();
}
public Human createWhiteHuman() {
return new FemaleWhiteHuman();
}
}
MaleFactory:
public class MaleFactory implements HumanFactory{
public Human createYellowHuman() {
return new MaleYellowHuman();
}
public Human createBlackHuman() {
return new MaleBlackHuman();
}
public Human createWhiteHuman() {
return new MaleWhiteHuman();
}
}
Client:
public class NvWa {
public static void main(String[] agrs) throws Exception {
HumanFactory maleHumanFactory = new MaleFactory();
HumanFactory femaleHumanFactory = new FemaleFactory();
Human maleYellowHuman = maleHumanFactory.createYellowHuman();
Human femaleYelloHuman = femaleHumanFactory.createYellowHuman();
maleYellowHuman.getColor();
maleYellowHuman.talk();
maleYellowHuman.getSex();
femaleYelloHuman.getColor();
femaleYelloHuman.talk();
femaleYelloHuman.getSex();
}
}