请编写一个简单工厂模式的实际应用案例代码。

参考回答

问题:编写一个简单工厂模式的实际应用案例代码。

// 产品接口
interface Product {
    void use();
}

// 具体产品A
class ProductA implements Product {
    @Override
    public void use() {
        System.out.println("使用产品A");
    }
}

// 具体产品B
class ProductB implements Product {
    @Override
    public void use() {
        System.out.println("使用产品B");
    }
}

// 简单工厂
class ProductFactory {
    public static Product createProduct(String type) {
        if (type.equals("A")) {
            return new ProductA();
        } else if (type.equals("B")) {
            return new ProductB();
        } else {
            throw new IllegalArgumentException("未知产品类型");
        }
    }
}

// 客户端
public class SimpleFactoryExample {
    public static void main(String[] args) {
        Product productA = ProductFactory.createProduct("A");
        productA.use();

        Product productB = ProductFactory.createProduct("B");
        productB.use();
    }
}
Java

详细讲解与拓展

1. 简单工厂模式的结构

  • 产品接口(Product):定义了所有具体产品的公共接口,客户端通过该接口与具体产品进行交互。
  • 具体产品(ProductA 和 ProductB):实现了产品接口,提供具体的实现。
  • 工厂(ProductFactory):根据客户端提供的参数,创建并返回相应的产品实例。
  • 客户端(SimpleFactoryExample):通过工厂获取产品实例,调用产品的方法。

2. 核心思想

简单工厂模式的核心在于将对象的创建逻辑封装到工厂类中,客户端不需要直接创建对象,而是通过工厂来获取。它的目的是将客户端和具体产品之间的依赖关系解耦,使得客户端不直接关心产品的创建细节。

3. 优点
封装性强:客户端无需知道产品的具体实现,只需知道如何通过工厂获取产品。
扩展性好:当需要添加新产品时,只需要修改工厂类,新增对应的产品类即可,符合开放封闭原则。

4. 缺点
工厂类责任过重:工厂类需要了解所有的产品类型,一旦有新的产品,工厂类也需要修改,违反了单一责任原则。
不利于复杂场景:如果产品种类增多,工厂的判断逻辑会变得复杂且难以维护。

5. 扩展
产品数量增加时的复杂性:假设产品种类增多,简单工厂模式的缺点会逐渐显现。可以考虑使用其他设计模式来解决这些问题,例如工厂方法模式抽象工厂模式

举个例子:

假设我们在开发一个图形绘制应用,程序支持绘制不同形状的图形。我们可以通过简单工厂模式创建不同的图形对象:

// 图形接口
interface Shape {
    void draw();
}

// 具体图形:圆形
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}

// 具体图形:矩形
class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

// 简单工厂
class ShapeFactory {
    public static Shape createShape(String type) {
        if (type.equals("circle")) {
            return new Circle();
        } else if (type.equals("rectangle")) {
            return new Rectangle();
        } else {
            throw new IllegalArgumentException("未知图形类型");
        }
    }
}

// 客户端
public class ShapeFactoryExample {
    public static void main(String[] args) {
        Shape circle = ShapeFactory.createShape("circle");
        circle.draw();

        Shape rectangle = ShapeFactory.createShape("rectangle");
        rectangle.draw();
    }
}
Java

在这个例子中,简单工厂模式帮助我们封装了不同图形的创建逻辑,客户端只关心如何使用这些图形。

总结

简单工厂模式是一种创建型模式,通过工厂类封装对象创建的逻辑。它的优点是解耦和高内聚,但随着产品种类的增加,工厂类可能变得过于庞大,维护和扩展性较差。

发表评论

后才能评论