工厂方法模式 (Factory Method)
不确定想要什么?让工厂来决定!你只需要指定类型,工厂就会为你造出合适的对象。
想象一下,在一个魔法世界里,你需要一只不同种类的宠物来帮你打怪、探险或守护。可是,你不想自己去挑选、找寻各种宠物,不知道哪只适合自己。于是,你找到了一个神奇的“宠物工厂”。这个工厂有一项神奇的能力:只要你告诉它你需要什么类型的宠物,工厂就能制造出最适合你的那一只。你想要一只战斗力强的龙?没问题!你想要一只可爱的小猫陪伴?工厂立马帮你造出来!
趣味解读:让工厂为你选宠物!
想象你是一名冒险者,进入了一个庞大的城市。在这里,有一个被誉为“最强工厂”的地方,专门为你生产各种魔法宠物。你什么都不用担心,只要告诉它你需要什么类型的宠物(比如战斗型、治愈型或者探索型),它就会在几分钟内交给你一只最适合你的宠物。更妙的是,每当你需要新的宠物,工厂都会根据你的需求,量身定制,确保每只宠物都能完美适配你的冒险需求。是不是觉得很棒?这就是工厂方法模式的魅力。
Java代码案例:图形绘制工厂
假设你正在开发一个图形绘制应用,用户可以选择不同的形状(如圆形、矩形、三角形)来绘制图形。你不希望每个用户都手动去创建形状对象,而是让工厂来处理这些工作,只需传入类型,工厂就能自动为你创建合适的图形。
// 图形接口
interface Shape {
void draw();
}
// 圆形类
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Circle");
}
}
// 矩形类
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Rectangle");
}
}
// 三角形类
class Triangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Triangle");
}
}
// 工厂方法
abstract class ShapeFactory {
abstract Shape createShape();
}
// 圆形工厂
class CircleFactory extends ShapeFactory {
@Override
Shape createShape() {
return new Circle();
}
}
// 矩形工厂
class RectangleFactory extends ShapeFactory {
@Override
Shape createShape() {
return new Rectangle();
}
}
// 三角形工厂
class TriangleFactory extends ShapeFactory {
@Override
Shape createShape() {
return new Triangle();
}
}
public class Main {
public static void main(String[] args) {
ShapeFactory circleFactory = new CircleFactory();
Shape circle = circleFactory.createShape();
circle.draw();
ShapeFactory rectangleFactory = new RectangleFactory();
Shape rectangle = rectangleFactory.createShape();
rectangle.draw();
ShapeFactory triangleFactory = new TriangleFactory();
Shape triangle = triangleFactory.createShape();
triangle.draw();
}
}
解析:
在这个例子中,我们通过工厂方法(
createShape()
)来创建不同类型的图形,而不是直接在客户端代码中手动创建它们。ShapeFactory
是一个抽象工厂类,每个具体工厂(如CircleFactory
,RectangleFactory
,TriangleFactory
)负责创建特定的图形对象。通过这种方式,客户端代码不需要了解每个具体图形类的实现,只需通过工厂来获取对应的图形对象。
实际用途:
多种产品实例化: 假设你在开发一个游戏,需要生成不同种类的武器。通过工厂方法,你只需要指定武器的种类(比如剑、弓、枪等),工厂会自动为你生成相应的武器对象。
解耦和扩展: 工厂方法模式使得代码的扩展性和可维护性更强。当你需要添加新的形状或新的产品类型时,只需添加新的工厂类,而无需修改现有的代码逻辑。
总结:
工厂方法模式就像是一个强大的制造工厂,根据你的需求自动为你生产各种对象。你不需要关心对象的创建细节,直接指定类型,工厂会为你完成剩下的工作。通过这种方式,你可以减少代码中的重复逻辑,提高代码的可扩展性,同时让系统更加灵活和高效。