介绍
简单工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而无需暴露对象的创建逻辑。通过使用一个专门的工厂类,我们可以根据不同的参数来获取不同的具体对象,从而实现对象的创建和管理。
结构
简单工厂模式包含以下几个角色:
- 工厂类(Factory):负责创建具体对象的工厂类,通常包含一个静态方法用于创建对象。
- 抽象产品类(Product):定义产品的共同接口,具体产品类都实现了这个接口。
- 具体产品类(Concrete Product):实现抽象产品类接口的具体产品。
下面是一个简单的类图示例:
+-------------------+
| Factory |
+-------------------+
| + createProduct() |
+-------------------+
|
v
+-------------------+
| Product |
+-------------------+
| + operation() |
+-------------------+
^
|
+-------------------+
| ConcreteProduct |
+-------------------+
| + operation() |
+-------------------+
示例
假设我们有一个图形绘制应用程序,可以绘制不同形状的图形,如圆形、矩形和三角形。我们可以使用简单工厂模式来创建这些图形对象。
首先,我们定义一个抽象图形类 Shape
:
public abstract class Shape {
public abstract void draw();
}
然后,我们创建具体的图形类,如 Circle
、Rectangle
和 Triangle
,它们都继承自 Shape
类并实现了 draw()
方法:
public class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
public class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
public class Triangle extends Shape {
@Override
public void draw() {
System.out.println("绘制三角形");
}
}
接下来,我们创建一个简单工厂类 ShapeFactory
,它根据传入的参数来创建相应的图形对象:
public class ShapeFactory {
public static Shape createShape(String shapeType) {
if (shapeType.equalsIgnoreCase("circle")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("rectangle")) {
return new Rectangle();
} else if (shapeType.equalsIgnoreCase("triangle")) {
return new Triangle();
}
return null;
}
}
最后,我们可以使用简单工厂来创建和使用图形对象:
public class Main {
public static void main(String[] args) {
Shape circle = ShapeFactory.createShape("circle");
circle.draw(); // 输出:绘制圆形
Shape rectangle = ShapeFactory.createShape("rectangle");
rectangle.draw(); // 输出:绘制矩形
Shape triangle = ShapeFactory.createShape("triangle");
triangle.draw(); // 输出:绘制三角形
}
}
优点和适用场景
简单工厂模式具有以下优点:
- 将对象的创建逻辑集中在一个工厂类中,使得代码更加清晰和易于维护。
- 客户端代码只需要知道工厂类和抽象产品类,无需关心具体产品的创建过程。
- 可以通过工厂类来控制产品对象的创建,实现对对象的统一管理。
简单工厂模式适用于以下场景:
- 需要根据不同的条件创建不同的对象。
- 对象的创建逻辑相对简单,不涉及复杂的业务逻辑。
- 客户端不需要知道对象的具体创建过程,只需要知道抽象产品类和工厂类即可。
总结
简单工厂模式是一种常用且简单的创建型设计模式,它通过一个专门的工厂类来创建对象,将对象的创建逻辑封装起来,使得客户端代码与具体对象的创建过程解耦。在实际开发中,我们可以根据需要灵活运用简单工厂模式来创建不同类型的对象。
公众号请关注"果酱桑", 一起学习,一起进步!