public interface HumanInterface {
public void laugh();
public void cry();
public void talk();
public void sex();
}
public abstract class AbstractBlackHuman implements HumanInterface{
public void laugh() {
System.out.println("黑人会笑");
}
public void cry() {
System.out.println("黑人会哭");
}
public void talk() {
System.out.println("黑人可以说话,一般人听不懂");
}
}
public abstract class AbstractWhiteHuman implements HumanInterface{
public void laugh() {
System.out.println("白色人类会大笑,侵略的笑声");
}
public void cry() {
System.out.println("白色人类会哭");
}
public void talk() {
System.out.println("白色人类会说话,一般都是但是单字节!");
}
}
public abstract class AbstractYellowHuman implements HumanInterface{
public void laugh() {
System.out.println("黄色人类会大笑,幸福呀!");
}
public void cry() {
System.out.println("黄色人类会哭");
}
public void talk() {
System.out.println("黄色人类会说话,一般说的都是双字节");
}
}
public class BlackHuman_Female extends AbstractBlackHuman{
public void sex(){
System.out.println("该黑种人的性别为女...");
}
}
public class BlackHuman_Male extends AbstractBlackHuman{
public void sex(){
System.out.println("该黑种人的性别为男...");
}
}
public class WhiteHuman_Female extends AbstractWhiteHuman{
public void sex(){
System.out.println("该白种人的性别为女...");
}
}
public class WhiteHuman_Male extends AbstractWhiteHuman{
public void sex(){
System.out.println("该白种人的性别为男...");
}
}
public class YellowHuman_Female extends AbstractYellowHuman{
public void sex(){
System.out.println("该黄种人的性别为女...");
}
}
public class YellowHuman_Male extends AbstractYellowHuman{
public void sex(){
System.out.println("该黄种人的性别为男...");
}
}
public enum HumanEnum {
//把世界上所有人类型都定义出来
YelloMaleHuman("抽象工厂模式.humanImpl.YellowHuman_Male"),
YelloFemaleHuman("抽象工厂模式.humanImpl.YellowHuman_Female"),
WhiteFemaleHuman("抽象工厂模式.humanImpl.WhiteHuman_Female"),
WhiteMaleHuman("抽象工厂模式.humanImpl.WhiteHuman_Male"),
BlackFemaleHuman("抽象工厂模式.humanImpl.BlackHuman_Female"),
BlackMaleHuman("抽象工厂模式.humanImpl.BlackHuman_Male");
//定义构造函数,目的是Data(value)类型的相匹配
private HumanEnum(String value){
this.value = value;
}
private String value = "";
public String getValue(){
return this.value;
}
}
public interface HumanFactoryInterface {
public HumanInterface createYellowHuman();//制造黄色人类
public HumanInterface createWhiteHuman();//制造一个白色人类
public HumanInterface createBlackHuman();//制造一个黑色人类
}
public abstract class AbstractHumanFactory implements HumanFactoryInterface{
protected HumanInterface createHuman(HumanEnum humanEnum){
HumanInterface human = null;
//如果传递进来不是一个Enum中具体的一个Element的话,则不处理
if (!humanEnum.getValue().equals("")) {
try {
//直接产生一个实例
human = (HumanInterface) Class.forName(humanEnum.getValue()).newInstance();
} catch (Exception e) {
//因为使用了enum,这个种异常情况不会产生了,除非你的enum有问题;
e.printStackTrace();
}
}
return human;
}
}
public class HumanFactory_Female extends AbstractHumanFactory{
public HumanInterface createBlackHuman() {//创建一个女性黑种人
return super.createHuman(HumanEnum.BlackFemaleHuman);
}
public HumanInterface createWhiteHuman() {//创建一个女性白种人
return super.createHuman(HumanEnum.WhiteFemaleHuman);
}
public HumanInterface createYellowHuman() {//创建一个女性黄种人
return super.createHuman(HumanEnum.YelloFemaleHuman);
}
}
public class HumanFactory_Male extends AbstractHumanFactory{
public HumanInterface createBlackHuman() {//创建一个男性黑种人
return super.createHuman(HumanEnum.BlackMaleHuman);
}
public HumanInterface createWhiteHuman() {//创建一个男性白种人
return super.createHuman(HumanEnum.WhiteMaleHuman);
}
public HumanInterface createYellowHuman() {//创建一个男性黄种人
return super.createHuman(HumanEnum.YelloMaleHuman);
}
}
public class Client {
public static void main(String[] args){
//第一条生产线,男性生产线
HumanFactoryInterface maleHumanFactory = new HumanFactory_Male();
//第二条生产线,女性生产线
HumanFactoryInterface femaleHumanFactory = new HumanFactory_Female();
//生产线建立完毕,开始生产人了:
HumanInterface maleYellowHuman = maleHumanFactory.createYellowHuman();
HumanInterface femaleYellowHuman = femaleHumanFactory.createYellowHuman();
maleYellowHuman.cry();
maleYellowHuman.laugh();
femaleYellowHuman.sex();
/*
* 后面可以续了.....
*/
}
}