抽象工厂模式
作者:互联网
抽象工厂模式与工厂设计模式非常相似,抽象工厂模式是创建工厂的工厂。
我们可以这样理解,生产床的是一个工厂,生产玩具的是一个工厂,但是这些工厂都是你家的,那么我想要到你家的工厂做事是不是先要经过你的同意呀,因为你是最大的老板吧,如果你不同意,那么工厂的厂长也就不能让我去工作。这里也是这个道理,我们先要去从你那获取去工厂的权限,染后再去工厂报道,这样我就可以获得工厂的工作了。
具体的步骤如下图所示:
这里的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