设计方式-抽象工厂模式(abstract factory pattern)
设计模式----抽象工厂模式(abstract factory pattern)
Human.java代码如下:
AbstractBlackHuman.java代码如下:
AbstractWhiteHuman.java代码如下:
AbstractYellowHuman.java代码如下:
BlackFemaleHuman.java代码如下:
BlackMaleHuman.java代码如下:
WhiteFemaleHuman.java代码如下:
WhiteMaleHuman.java代码如下:
YellowFemaleHuman.java代码如下:
YellowMaleHuman.java代码如下:
HumanEnum.java代码如下:
HumanFactory.java代码如下:
AbstractHumanFactory.java代码如下:
FemaleHumanFactory.java代码如下:
MaleHumanFactory.java代码如下:
NvWa.java代码如下:
运行结果如下:
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(); } }
运行结果如下:
黄色人种会哭! 黄色人种会笑! 黄色人种在聊天! 该黄种人的性别为男性! 黄色人种会哭! 黄色人种会笑! 黄色人种在聊天! 该黄种人的性别为女性!