设计方式-抽象工厂模式(abstract factory pattern)

设计模式----抽象工厂模式(abstract factory pattern)

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();
	}

}



运行结果如下:

黄色人种会哭!
黄色人种会笑!
黄色人种在聊天!
该黄种人的性别为男性!
黄色人种会哭!
黄色人种会笑!
黄色人种在聊天!
该黄种人的性别为女性!