美文网首页
抽象工厂模式-女娲补天续

抽象工厂模式-女娲补天续

作者: 迎风布阵x | 来源:发表于2018-12-19 20:32 被阅读0次

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

接工厂模式中女娲补天的故事:
女娲发现这样造出来的人,他们太相似了,彼此之间看起来没什么不一样。于是女娲想让他们之间有更多的不同。比如引入性别,让男性女性之间有更多的差异。
首先我们需要把炉子要造的三种肤色的人这些类改变一下,我们就不去创建新的类了,毕竟性别只是人的一种特征,可以将其作为属性放入类中。

public interface Human {
    //首先定义什么是人类 
    
    //人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间 没有大笑了; 
     public  void laugh();
     
     //人类还会哭,代表痛苦 
     public void cry();
     
     //人类会说话 
     public void talk();   
     
     //提供给炉子去使用的方法,设置性别。  如果自己用那就是变性手术了!
     public void setSex(int sex);
     
     //告诉大家自己是什么性别的
     public void whichSex();
}


public class BlackHuman implements Human{
    private int sex;
    @Override
    public void laugh() {
        System.out.println("黑人会笑"); 
    }
    @Override
    public void cry() {
        System.out.println("黑人会哭"); 
    }
    @Override
    public void talk() {
        System.out.println("黑人可以说话,一般人听不懂"); 
    }
    @Override
    public void setSex(int sex) {
        this.sex = sex;
    }
    @Override
    public void whichSex() {
        if(sex == 0)
            System.out.println("女的");
        else
            System.out.println("男的");
    }
}


public class WhiteHuman implements Human {
    private int sex;
    @Override
    public void laugh() {
        System.out.println("白色人种会大笑,侵略的笑声"); 
    }
    @Override
    public void cry() {
        System.out.println("白色人种会哭"); 
    }
    @Override
    public void talk() {
        System.out.println("白色人种会说话,一般都是但是单字节!"); 
    }
    @Override
    public void setSex(int sex) {
        this.sex = sex;
    }
    @Override
    public void whichSex() {
        if(sex == 0)
            System.out.println("女的");
        else
            System.out.println("男的");
    }
}



public class YellowHuman implements Human {
    private int sex;
    @Override
    public void laugh() {
        System.out.println("黄色人种会大笑,幸福呀!"); 

    }

    @Override
    public void cry() {
        System.out.println("黄色人种会哭"); 

    }

    @Override
    public void talk() {
        System.out.println("黄色人种会说话,一般说的都是双字节"); 
    }

//提供给炉子使用的接口
    @Override
    public void setSex(int sex) {
        this.sex = sex;
    }
    
    @Override
    public void whichSex() {
        if(sex == 0)
            System.out.println("女的");
        else
            System.out.println("男的");
    }
}

接下来是炉子的模子:

public interface HumanFactory {
    //定义一个烤箱,泥巴塞进去,人就出来,这个先进了 
    public Human createMan();
    public Human createWoman();
}

一葫芦画瓢:三个炉子:

public class WhiteHumanFactory implements HumanFactory{
    @Override
    public Human createMan() {
        Human man = new WhiteHuman();
        man.setSex(1);
        return man;
    }

    @Override
    public Human createWoman() {
        Human woman = new WhiteHuman();
        woman.setSex(0);
        return woman;
    }
}

public class YellowHumanFactory implements HumanFactory {
    @Override
    public Human createMan() {
        Human man = new YellowHuman();
        man.setSex(1);
        return man;
    }

    @Override
    public Human createWoman() {
        Human woman = new YellowHuman();
        woman.setSex(0);
        return woman;
    }
}

public class BlackHumanFactory implements HumanFactory {
    @Override
    public Human createMan() {
        Human man = new BlackHuman();
        man.setSex(1);
        return man;
    }

    @Override
    public Human createWoman() {
        Human woman = new BlackHuman();
        woman.setSex(0);
        return woman;
    }
}

最后,女娲造人:

public class NvWa {
    public static void main(String[] args) { 
        HumanFactory factory1 = new WhiteHumanFactory();
        HumanFactory factory2 = new BlackHumanFactory();
        HumanFactory factory3 = new YellowHumanFactory();
        System.out.println("------------造出的第一批人是这样的:白人-----------------"); 
        Human whiteHuman = factory1.createMan(); 
        whiteHuman.cry(); 
        whiteHuman.laugh(); 
        whiteHuman.talk(); 
        whiteHuman.whichSex();
        whiteHuman = factory1.createWoman();
        whiteHuman.cry(); 
        whiteHuman.laugh(); 
        whiteHuman.talk(); 
        whiteHuman.whichSex();
        
        System.out.println("\n\n------------造出的第二批人是这样的:黑人-----------------"); 
        Human blackHuman = factory2.createMan(); 
        blackHuman.cry(); 
        blackHuman.laugh(); 
        blackHuman.talk(); 
        blackHuman.whichSex();
        blackHuman = factory2.createWoman();
        blackHuman.cry(); 
        blackHuman.laugh(); 
        blackHuman.talk(); 
        blackHuman.whichSex();
        
        System.out.println("\n\n------------造出的第三批人是这样的:黄色人种-----------------"); 
        Human yellowHuman = factory3.createMan(); 
        yellowHuman.cry(); 
        yellowHuman.laugh(); 
        yellowHuman.talk(); 
        yellowHuman.whichSex();
        yellowHuman = factory3.createWoman();
        yellowHuman.cry(); 
        yellowHuman.laugh(); 
        yellowHuman.talk(); 
        yellowHuman.whichSex();
        
    } 
}

相关文章

网友评论

      本文标题:抽象工厂模式-女娲补天续

      本文链接:https://www.haomeiwen.com/subject/swldkqtx.html