介绍
又叫静态工厂方法模式,非GoF 23种设计模式之一。
特点
需要什么对象就传递一个参数,就可以获取需要的对象而不需要知道对象的创建细节。
举例
动物类
public abstract class Animal {
public abstract void eat();
}
猫类
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
狗类
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗啃骨头");
}
}
动物工厂
public class AnimalFactory {
private AnimalFactory() {
}
public static Animal createAnimal(String type) {
if("cat".equals(type)) {
return new Cat();
} else if("dog".equals(type)) {
return new Dog();
} else {
return null;
}
}
}
测试
public class AnimalDemo {
public static void main(String[] args) {
Animal a = AnimalFactory.createAnimal("cat");
a.eat();
a = AnimalFactory.createAnimal("dog");
a.eat();
a = AnimalFactory.createAnimal("sheep");
if(a != null) {
a.eat();
} else {
System.out.println("对不起,暂时不提供这种动物哦!");
}
}
}
执行结果
适用场景
- 工厂类集中处理了创建对象的逻辑,故适用创建的对象比较少的场景;
- 由简单工厂模式的特点可知,适用客户端只知道传入参数,不关心如何创建对象的场景。