MST

星途 面试题库

面试题:Java中工厂模式的应用

请描述Java中工厂模式的概念,并且使用Java代码实现一个简单的工厂模式,例如生产不同类型的图形(圆形、矩形等)。同时说明工厂模式在面向对象思想中解决了什么问题,以及它的优缺点。
33.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

工厂模式概念

工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离。通过使用工厂模式,可以将对象创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样使得代码更具可维护性和可扩展性。

Java代码实现简单工厂模式生产不同图形

  1. 首先定义图形接口
public interface Shape {
    void draw();
}
  1. 定义圆形实现类
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}
  1. 定义矩形实现类
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}
  1. 定义工厂类
public class ShapeFactory {
    public Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if ("circle".equalsIgnoreCase(shapeType)) {
            return new Circle();
        } else if ("rectangle".equalsIgnoreCase(shapeType)) {
            return new Rectangle();
        }
        return null;
    }
}
  1. 使用工厂类
public class FactoryPatternDemo {
    public static void main(String[] args) {
        ShapeFactory shapeFactory = new ShapeFactory();
        Shape circle = shapeFactory.getShape("circle");
        circle.draw();

        Shape rectangle = shapeFactory.getShape("rectangle");
        rectangle.draw();
    }
}

工厂模式解决的问题

  1. 解耦对象创建和使用:客户端不需要知道具体对象的创建细节,只需要向工厂请求对象,降低了客户端与具体对象之间的耦合度。
  2. 提高可维护性和可扩展性:如果需要添加新的对象类型,只需要在工厂类中添加相应的创建逻辑,而不需要修改大量的客户端代码。

工厂模式的优点

  1. 代码可维护性:对象创建逻辑集中在工厂类,修改创建逻辑时只需要修改工厂类,不会影响到其他大量的客户端代码。
  2. 可扩展性:易于添加新的对象类型,符合开闭原则。
  3. 降低耦合度:将对象创建和使用分离,使得各模块之间的依赖关系更加清晰。

工厂模式的缺点

  1. 工厂类职责过重:随着对象类型的增多,工厂类的if - else逻辑可能会变得复杂,不利于维护。
  2. 不符合单一职责原则:工厂类可能承担了过多对象创建的职责。
  3. 引入额外的复杂性:对于简单的对象创建场景,使用工厂模式可能会引入过多的类和复杂的结构。