1、什么是工厂模式?
工厂方法模式为我们提供了一种封装具体类型实例化的方法。工厂方法模式封装了选择和实例化适当类所需的功能,这些功能位于称为工厂方法的指定方法中。工厂方法根据应用程序上下文和其他影响因素从类层次结构中选择合适的类。然后实例化所选的类并将其作为父类类型的实例返回。这种方法的优点是应用程序对象可以使用factory方法来访问适当的类实例。这消除了应用程序对象处理不同的类选择条件的需要。
2、简单工厂模式
// 这个工厂只做一件事,帮他的客户创建披萨
public class SimplePizzaFactory {
// 在工厂内定义一个方法createPizza()方法,所有客户用这个方法来实例化新对象
public Pizza createPizza(String type) {
Pizza pizza = null;
if (type.equals("cheese")) {
pizza = new CheesePizza();
} else if (type.equals("pepperoni")) {
pizza = new PepperoniPizza();
} else if (type.equals("clam")) {
pizza = new ClamPizza();
} else if (type.equals("veggie")) {
pizza = new VeggiePizza();
}
return pizza;
}
}
// 你需要更多的披萨类型传入orderPizza()
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = factory.createPizza(type);
// 一旦我们有了披萨,需要做一些必要的工作。每个Pizza的子类型都知道如何准备自己
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
3、抽象工厂模式
抽象工厂(Abstract Factory,又称Kit)将工厂方法模式的概念带到下一个层次。抽象工厂是一个类,它提供一个接口来生成一系列对象。在Java中,可以使用接口或抽象类来实现。当客户机对象想要创建一组相关的依赖类中的一个实例,而不需要知道要实例化哪个特定的具体类时,抽象工厂模式非常有用。不同的具体工厂实现抽象工厂接口。客户端对象利用这些具体的工厂来创建对象,因此,不需要知道实际实例化了哪个具体的类。
//具体类的抽象接口
public interface Shape {
//接口方法
}
//具体类Circle
public class Circle implements Shape {
//接口方法实现
}
//具体类红色圆
public class RedCircle implements Shape {
//接口方法实现
}
//...各种颜色的圆...
//具体类Triangle
public class Triangle implements Shape {
//接口方法实现
}
//具体类红色Triangle
public class RedTriangle implements Shape {
//接口方法实现
}
//...各种颜色的Triangle...
//工厂接口
public interface ShapeFactory {
Shape getShape();
}
//CircleFactory
public class CircleFactory implements ShapeFactory {
//返回实例
}
//RedCircleFactory
public class RedCircleFactory implements ShapeFactory {
//返回实例
}
//...各种颜色的Circle的工厂...
//TriangleFactory
public class TriangleFactory implements ShapeFactory {
//返回实例
}
//RedTriangleFactory
public class RedTriangleFactory implements ShapeFactory {
//返回实例
}
//...各种颜色的Triangle的工厂...