希赛考试网
首页 > 软考 > 软件设计师

简单工厂模式和工厂方法模式的区别

希赛网 2024-06-15 08:00:56

在软件开发中,工厂模式是一种常用的设计模式。它可以帮助我们更好地组织代码,提高代码的可重用性和可扩展性。其中,简单工厂模式和工厂方法模式是工厂模式的两种不同实现方式。本文将从多个角度分析简单工厂模式和工厂方法模式的区别。

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. 总结

简单工厂模式和工厂方法模式都是常用的工厂模式实现方式。简单工厂模式适用于工厂负责创建的对象较少的场景,而工厂方法模式适用于工厂需要创建的对象较多的场景。在实际开发中,我们需要根据具体业务场景来选择合适的工厂模式。

【关键词】工厂模式,简单工厂模式,工厂方法模式

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件