在软件开发中,工厂模式是一种常用的设计模式。它可以帮助我们更好地组织代码,提高代码的可重用性和可扩展性。其中,简单工厂模式和工厂方法模式是工厂模式的两种不同实现方式。本文将从多个角度分析简单工厂模式和工厂方法模式的区别。
1. 定义
简单工厂模式(Simple Factory Pattern)又称为静态工厂方法,它属于创建型模式。简单工厂模式的定义为:由一个工厂对象根据传入的参数,动态决定应该创建哪一个产品类实例。简单工厂模式适用于工厂类负责创建的对象较少的场景,因为如果创建的对象较多,工厂类就会变得非常庞大,不利于代码的维护。
工厂方法模式(Factory Method Pattern)也称为工厂模式,它属于创建型模式。工厂方法模式的定义为:定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。工厂方法模式适用于工厂类需要创建的对象较多的场景,因为如果对象较少,使用工厂方法模式反而会增加代码的复杂度。
2. 结构
简单工厂模式的结构包括三个部分:工厂类、抽象产品类和具体产品类。其中,工厂类负责创建具体产品类的实例。抽象产品类负责声明具体产品类的抽象方法,在具体产品类中实现。具体产品类实现抽象产品类中的方法。
工厂方法模式的结构包括四个部分:抽象工厂类、具体工厂类、抽象产品类和具体产品类。其中,抽象工厂类定义创建产品对象的方法,具体工厂类实现抽象工厂类中的方法,返回具体的产品实例。抽象产品类定义产品的抽象方法,具体产品类实现抽象产品类中的方法。
3. 使用场景
简单工厂模式适用于以下场景:
- 工厂类负责创建对象的数量较少。
- 客户端只需要传入工厂类的参数,对于如何创建对象不需要关心。
工厂方法模式适用于以下场景:
- 工厂类需要创建的对象较多。
- 客户端需要自己选择要实例化的对象类。
4. 应用举例
下面举例说明简单工厂模式和工厂方法模式的应用。
简单工厂模式:
假设有一个图形类,包括圆形和矩形两种形状。我们定义一个工厂类,根据传入的参数创建具体的图形对象。
```java
public class ShapeFactory {
public static final int CIRCLE = 1;
public static final int RECTANGLE = 2;
public static Shape createShape(int type) {
if (type == CIRCLE) {
return new Circle();
} else if (type == RECTANGLE) {
return new Rectangle();
} else {
throw new IllegalArgumentException("Invalid shape type: " + type);
}
}
}
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Draw a circle.");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Draw a rectangle.");
}
}
```
客户端可以通过工厂类创建具体的图形对象。
```java
Shape circle = ShapeFactory.createShape(ShapeFactory.CIRCLE);
Shape rectangle = ShapeFactory.createShape(ShapeFactory.RECTANGLE);
```
工厂方法模式:
假设有一个商店类,包括书店和衣服店两种商品类型。我们定义一个工厂接口,让书店和衣服店分别实现工厂接口,创建具体的商品对象。
```java
public interface Store {
Product createProduct();
}
public interface Product {
void showInfo();
}
public class BookStore implements Store {
@Override
public Product createProduct() {
return new Book();
}
}
public class ClothesStore implements Store {
@Override
public Product createProduct() {
return new Clothes();
}
}
public class Book implements Product {
@Override
public void showInfo() {
System.out.println("This is a book.");
}
}
public class Clothes implements Product {
@Override
public void showInfo() {
System.out.println("This is a piece of clothes.");
}
}
```
客户端可以通过商店类创建具体的商品对象。
```java
Store bookStore = new BookStore();
Product book = bookStore.createProduct();
book.showInfo();
Store clothesStore = new ClothesStore();
Product clothes = clothesStore.createProduct();
clothes.showInfo();
```
5. 总结
简单工厂模式和工厂方法模式都是常用的工厂模式实现方式。简单工厂模式适用于工厂负责创建的对象较少的场景,而工厂方法模式适用于工厂需要创建的对象较多的场景。在实际开发中,我们需要根据具体业务场景来选择合适的工厂模式。
【关键词】工厂模式,简单工厂模式,工厂方法模式
扫码咨询 领取资料