其他分享
首页 > 其他分享> > 抽象工厂模式

抽象工厂模式

作者:互联网

抽象工厂模式与工厂设计模式非常相似,抽象工厂模式是创建工厂的工厂。

我们可以这样理解,生产床的是一个工厂,生产玩具的是一个工厂,但是这些工厂都是你家的,那么我想要到你家的工厂做事是不是先要经过你的同意呀,因为你是最大的老板吧,如果你不同意,那么工厂的厂长也就不能让我去工作。这里也是这个道理,我们先要去从你那获取去工厂的权限,染后再去工厂报道,这样我就可以获得工厂的工作了。

具体的步骤如下图所示:

在这里插入图片描述

这里的people接口和其实现类这里不在展示,我的上个文件已写。

Animal接口:

public interface Animal {
    public void fly();
}

实现类:

public class Hawk implements Animal{
    @Override
    public void fly() {
        System.out.println("hawk can fly");
    }
}
public class Bird implements Animal{
    @Override
    public void fly() {
        System.out.println("Bird can fly");
    }
}

抽象工厂:

public abstract class AbstractFactory {
    public abstract Animal getAnimal(String name);
    public abstract people getpeople(String name);
}

具体实现的工厂

public class AnimalFactory extends AbstractFactory{
    public Animal getAnimal(String name){
        if (name.equals("Hawk")){
            return new Hawk();
        }
        if (name.equals("Bird")){
            return new Bird();
        }
        return null;
    }
    @Override
    public people getpeople(String name) {
        return null;
    }
}
public class PeopleFactory extends AbstractFactory {
    public people getpeople(String name){
        if (name.equals("Student")){
            return  new Student();
        }
        if (name.equals("teacher")){
            return new teacher();
        }
        return null;
    }
    @Override
    public Animal getAnimal(String name) {
        return null;
    }
}

获取工厂的类:

public class FactoryProducer {
    public static AbstractFactory getFactory(String choice){
        if(choice.equalsIgnoreCase("ANIMAL")){
            return new AnimalFactory();
        }else if(choice.equalsIgnoreCase("people")){
            return new PeopleFactory();
        }
        return null;
    }
}

demo:

public class Demo {
    public static void main(String[] args) {
//        获取一个工厂
        AbstractFactory animalFactory =FactoryProducer.getFactory("ANIMAL");
//        工厂创建实例
        Animal b = animalFactory.getAnimal("Bird");
        b.fly();
        Animal c = animalFactory.getAnimal("Hawk");
        c.fly();
        AbstractFactory peopleFactory = FactoryProducer.getFactory("people");
        people p = peopleFactory.getpeople("teacher");
        p.things();
        people y = peopleFactory.getpeople("Student");
        y.things();
    }
}

out:

Bird can fly
hawk can fly
teacher
Student

标签:fly,return,name,模式,工厂,抽象,Animal,public
来源: https://blog.csdn.net/good_lick/article/details/120579416