Human.java代码如下:
package com.designPattern.abstractfactory;
public interface Human {
public void laugh();
public void cry();
public void talk();
public void sex();
}
AbstractBlackHuman.java代码如下:
package com.designPattern.abstractfactory;
public abstract class AbstractBlackHuman implements Human {
public void cry(){
System.out.println("黑色人种会哭!");
}
public void laugh(){
System.out.println("黑色人种会笑!");
}
public void talk(){
System.out.println("黑色人种在聊天!");
}
}
AbstractWhiteHuman.java代码如下:
package com.designPattern.abstractfactory;
public abstract class AbstractWhiteHuman implements Human{
public void cry(){
System.out.println("白色人种会哭!");
}
public void laugh(){
System.out.println("白色人种会笑!");
}
public void talk(){
System.out.println("白色人种在聊天!");
}
}
AbstractYellowHuman.java代码如下:
package com.designPattern.abstractfactory;
public abstract class AbstractYellowHuman implements Human{
public void cry(){
System.out.println("黄色人种会哭!");
}
public void laugh(){
System.out.println("黄色人种会笑!");
}
public void talk(){
System.out.println("黄色人种在聊天!");
}
}
BlackFemaleHuman.java代码如下:
package com.designPattern.abstractfactory;
public class BlackFemaleHuman extends AbstractWhiteHuman{
public void sex(){
System.out.println("该黑种人的性别为女性!");
}
}
BlackMaleHuman.java代码如下:
package com.designPattern.abstractfactory;
public class BlackMaleHuman extends AbstractWhiteHuman{
public void sex(){
System.out.println("该黑种人的性别为男性!");
}
}
WhiteFemaleHuman.java代码如下:
package com.designPattern.abstractfactory;
public class WhiteFemaleHuman extends AbstractWhiteHuman{
public void sex(){
System.out.println("该白种人的性别为女性!");
}
}
WhiteMaleHuman.java代码如下:
package com.designPattern.abstractfactory;
public class WhiteMaleHuman extends AbstractWhiteHuman{
public void sex(){
System.out.println("该白种人的性别为男性!");
}
}
YellowFemaleHuman.java代码如下:
package com.designPattern.abstractfactory;
public class YellowFemaleHuman extends AbstractYellowHuman{
public void sex(){
System.out.println("该黄种人的性别为女性!");
}
}
YellowMaleHuman.java代码如下:
package com.designPattern.abstractfactory;
public class YellowMaleHuman extends AbstractYellowHuman{
public void sex(){
System.out.println("该黄种人的性别为男性!");
}
}
HumanEnum.java代码如下:
package com.designPattern.abstractfactory;
public enum HumanEnum {
YellowMaleHuman("com.designPattern.abstractfactoryMethod.YellowMaleHuman"),
YellowFemaleHuman("com.designPattern.abstractfactoryMethod.YellowFemaleHuman"),
WhiteMaleHuman("com.designPattern.abstractfactoryMethod.WhiteMaleHuman"),
WhiteFemaleHuman("com.designPattern.abstractfactoryMethod.WhiteFemaleHuman"),
BlackMaleHuman("com.designPattern.abstractfactoryMethod.BlackMaleHuman"),
BlackFemaleHuman("com.designPattern.abstractfactoryMethod.BlackFemaleHuman");
private String value = "";
private HumanEnum(String value){
this.value = value;
}
public String getValue(){
return this.value;
}
}
HumanFactory.java代码如下:
package com.designPattern.abstractfactory;
public interface HumanFactory {
public Human createYellowHuman();
public Human createWhiteHuman();
public Human createBlackHuman();
}
AbstractHumanFactory.java代码如下:
package com.designPattern.abstractfactory;
public abstract class AbstractHumanFactory implements HumanFactory{
protected Human createHuman(HumanEnum humanEnum){
Human human = null;
if(!humanEnum.getValue().equals("")){
try{
human = (Human)Class.forName(humanEnum.getValue()).newInstance();
}catch(Exception e){
e.printStackTrace();
}
}
return human;
}
}
FemaleHumanFactory.java代码如下:
package com.designPattern.abstractfactory;
public class FemaleHumanFactory extends AbstractHumanFactory{
@Override
public Human createYellowHuman() {
return super.createHuman(HumanEnum.YellowFemaleHuman);
}
@Override
public Human createWhiteHuman() {
return super.createHuman(HumanEnum.WhiteFemaleHuman);
}
@Override
public Human createBlackHuman() {
return super.createHuman(HumanEnum.BlackFemaleHuman);
}
}
MaleHumanFactory.java代码如下:
package com.designPattern.abstractfactory;
public class MaleHumanFactory extends AbstractHumanFactory{
@Override
public Human createYellowHuman() {
return super.createHuman(HumanEnum.YellowMaleHuman);
}
@Override
public Human createWhiteHuman() {
return super.createHuman(HumanEnum.WhiteMaleHuman);
}
@Override
public Human createBlackHuman() {
return super.createHuman(HumanEnum.BlackMaleHuman);
}
}
NvWa.java代码如下:
package com.designPattern.abstractfactory;
public class NvWa {
public static void main(String[] args) {
HumanFactory maleHumanFactory = new MaleHumanFactory();
HumanFactory femaleHumanFactory = new FemaleHumanFactory();
Human maleYellowHuman = maleHumanFactory.createYellowHuman();
Human femaleYellowHuman = femaleHumanFactory.createYellowHuman();
maleYellowHuman.cry();
maleYellowHuman.laugh();
maleYellowHuman.talk();
maleYellowHuman.sex();
femaleYellowHuman.cry();
femaleYellowHuman.laugh();
femaleYellowHuman.talk();
femaleYellowHuman.sex();
}
}
运行结果如下:
黄色人种会哭!
黄色人种会笑!
黄色人种在聊天!
该黄种人的性别为男性!
黄色人种会哭!
黄色人种会笑!
黄色人种在聊天!
该黄种人的性别为女性!