从设计模型的类型来讲,简单的工厂模式属于创建型模式,又叫静态工厂方法模式,简单的工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
简单工厂模式的实质是由工厂类根据传入的参数,动态决定应该创建哪种产品类(这些产品类继承自一个父类或实现一个接口)的实例。
工厂( Creator )角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
抽象产品( Product )角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品( Concrete Product )角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
举例说明:
public interface Animal { public void makeSound(); }
public class Cat implements Animal{ @Override public void makeSound() { System.out.println("喵喵..."); } }
public class Dog implements Animal{ @Override public void makeSound() { System.out.println("汪汪..."); } }
public class AnimalFactory { public static Animal createAnimal(String animal) { if (animal.equals("猫")) { return new Cat(); } else if (animal.equals("狗")) { return new Dog(); }else { return null; } } }
public class AnimalSound {
public static void main(String[] args) {
Animal animal=AnimalFactory.createAnimal("狗");
animal.makeSound();
}
}
public class AnimalSound {
public static void main(String[] args) {
Animal animal=AnimalFactory.createAnimal("猫");
animal.makeSound();
}
}
传入不同的参数,将调用不同的产品类执行相应的方法。
优点:调用者可以不必考虑如何创建对象,而只通过传入参数进行调用就可以了。
缺点:如果要增加产品,只能改变工厂。如果产品类经常增加,那么,对于具体产品类型和条件参数的判断会很多,对系统的扩展和维护非常不利。
应用:因为它的优缺点,所以,工厂类负责创建的对象比较少,客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心的情况;