工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过定义一个接口来创建对象,但是将实际的对象创建过程交给子类来实现,从而使得工厂方法可以延迟到子类中进行。
下面以一个简单的例子来说明工厂方法模式的应用。
假设我们有一个图形类,其中包含一个绘制方法,我们需要根据用户的输入来创建不同的图形对象,并调用对应的绘制方法进行绘制。我们可以使用工厂方法模式来实现这个功能。
首先,我们定义一个图形接口,其中包含绘制方法:
public interface Shape {
void draw();
}
然后,我们定义三个具体的图形类,分别实现图形接口中的绘制方法:
public class Circle implements Shape {
public void draw() {
System.out.println("Drawing Circle");
}
}
public class Rectangle implements Shape {
public void draw() {
System.out.println("Drawing Rectangle");
}
}
public class Square implements Shape {
public void draw() {
System.out.println("Drawing Square");
}
}
接下来,我们定义一个工厂接口,其中包含一个创建图形对象的方法:
public interface ShapeFactory {
Shape createShape();
}
最后,我们定义三个具体的工厂类,分别用于创建不同的图形对象:
public class CircleFactory implements ShapeFactory {
public Shape createShape() {
return new Circle();
}
}
public class RectangleFactory implements ShapeFactory {
public Shape createShape() {
return new Rectangle();
}
}
public class SquareFactory implements ShapeFactory {
public Shape createShape() {
return new Square();
}
}
现在,我们可以在客户端中根据用户的输入来创建对应的图形对象并调用对应的绘制方法:
public class Client {
public static void main(String[] args) {
ShapeFactory factory = null;
Shape shape = null;
// 根据用户的输入创建对应的图形对象
String input = "Circle";
if (input.equalsIgnoreCase("Circle")) {
factory = new CircleFactory();
} else if (input.equalsIgnoreCase("Rectangle")) {
factory = new RectangleFactory();
} else if (input.equalsIgnoreCase("Square")) {
factory = new SquareFactory();
}
// 使用工厂对象创建图形对象并调用绘制方法
if (factory != null) {
shape = factory.createShape();
shape.draw();
}
}
}
这样,我们就使用工厂方法模式来实现了根据用户的输入来创建不同的图形对象并调用对应的绘制方法的功能。