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

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

作者: 迎风布阵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