设计模式读书笔记-抽象工厂模式

2016-08-21
读书笔记
  • 代码
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();

        /*
        * 后面可以续了.....
        */
    }
}

Kommentare: