抽象工厂(一)

来源:互联网 发布:华为源码 编辑:程序博客网 时间:2024/04/19 13:26
public interface Human {void laugh();void cry();void talk();void sex();}


public abstract class AbstractYellowMan implements Human {    public static String TAG = AbstractYellowMan.class.getSimpleName();@Overridepublic void laugh() { System.out.println(TAG +" laugh");}@Overridepublic void cry() { System.out.println(TAG +" cry");}@Overridepublic void talk() { System.out.println(TAG +" talk");} }


public abstract class AbstractWhiteMan implements Human {    public static String TAG = AbstractWhiteMan.class.getSimpleName();@Overridepublic void laugh() { System.out.println(TAG +" laugh");}@Overridepublic void cry() { System.out.println(TAG +" cry");}@Overridepublic void talk() { System.out.println(TAG +" talk");} }

public abstract class AbstractBlackMan implements Human {    public static String TAG = AbstractBlackMan.class.getSimpleName();@Overridepublic void laugh() { System.out.println(TAG +" laugh");}@Overridepublic void cry() { System.out.println(TAG +" cry");}@Overridepublic void talk() { System.out.println(TAG +" talk");} }


public class ImplMaleYellowMman extends AbstractYellowMan { @Overridepublic void sex() { System.out.println("该黄种人性别是  **男**");} }

public class ImplMaleWhiteMman extends AbstractYellowMan { @Overridepublic void sex() { System.out.println("该白种人性别是  **男**"); } }

public class ImplMaleBlackMman extends AbstractYellowMan { @Overridepublic void sex() { System.out.println("该黑种人性别是  **男**"); } }

public class ImplFemaleYellowMman extends AbstractYellowMan { @Overridepublic void sex() { System.out.println("该黄种人性别是  **女**"); } }

public class ImplFemaleWhiteMman extends AbstractYellowMan { @Overridepublic void sex() { System.out.println("该白种人性别是  **女**"); } }

public class ImplFemaleBlackMman extends AbstractYellowMan { @Overridepublic void sex() { System.out.println("该黑种人性别是  **女**"); } }

public enum HumanEnum {      YellowMaleMan("设计模式之禅.ImplMaleYellowMman"),     YellowFemaleMan("设计模式之禅.ImplFemaleYellowMman"),     BlackMaleMan("设计模式之禅.ImplMaleBlackMman"),     BlackFemaleMan("设计模式之禅.ImplFemaleBlackMman"),     WhiteMaleMan("设计模式之禅.ImplMaleWhiteMman"),     WhiteFemalMan("设计模式之禅.ImplFemaleWhiteMman");      private String value = ""; private HumanEnum(String value){ this.value = value; } public String getValue(){ return this.value; }}

public interface HumanFactory {     public Human createYellowMan();     public Human createWhiteMan();     public Human createBlackMan();}

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

public class MaleHumanFactory extends AbstractHumanFactory { @Overridepublic Human createYellowMan() { return super.createHuman(HumanEnum.YellowMaleMan);} @Overridepublic Human createWhiteMan() { return super.createHuman(HumanEnum.WhiteMaleMan);} @Overridepublic Human createBlackMan() { return super.createHuman(HumanEnum.BlackMaleMan);} }

public class FemaleHumanFactory extends AbstractHumanFactory { @Overridepublic Human createYellowMan() { return super.createHuman(HumanEnum.YellowFemaleMan);} @Overridepublic Human createWhiteMan() { return super.createHuman(HumanEnum.WhiteFemalMan);} @Overridepublic Human createBlackMan() { return super.createHuman(HumanEnum.BlackFemaleMan);} }

public class Client { public static void main(String[] args) { HumanFactory malefactory = new MaleHumanFactory(); HumanFactory femalFactory = new FemaleHumanFactory(); Human human = malefactory.createBlackMan(); human.cry(); human.sex(); human.talk(); human.laugh(); } }


















原创粉丝点击