Clarence Java DocClarence Java Doc
开发总结
Java
数据库
缓存
JVM
Spring
SpringBoot
微服务
消息队列
高并发
分布式
高可用
设计模式
场景题
Netty
云原生
算法
架构
开发协议
IOT
人工智能
开发总结
Java
数据库
缓存
JVM
Spring
SpringBoot
微服务
消息队列
高并发
分布式
高可用
设计模式
场景题
Netty
云原生
算法
架构
开发协议
IOT
人工智能
  • 设计模式简介
  • 单例模式
  • 工厂模式
  • 策略模式
  • 责任链模式

工厂模式

作用:通过工厂创建对象,解耦实例化过程,便于扩展。

应用场景:

  • Spring BeanFactory / ApplicationContext(Spring IOC 容器)
  • JDBC DriverManager.getConnection()
  • 日志框架(Logback/SLF4J)

当然,这里给你举两个实际代码示例,分别展示简单工厂模式与工厂方法模式的应用:


一、简单工厂模式(Simple Factory)

比如你有不同的图形类,希望通过工厂来创建它们,而不用每次都 new。

// 产品接口
public interface Shape {
    void draw();
}

// 具体产品
public class Circle implements Shape {
    public void draw() {
        System.out.println("Drawing Circle");
    }
}

public class Rectangle implements Shape {
    public void draw() {
        System.out.println("Drawing Rectangle");
    }
}

// 工厂类
public class ShapeFactory {
    public static Shape createShape(String type) {
        switch (type) {
            case "circle":
                return new Circle();
            case "rectangle":
                return new Rectangle();
            default:
                throw new IllegalArgumentException("Unknown shape type");
        }
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        Shape shape = ShapeFactory.createShape("circle");
        shape.draw(); // 输出:Drawing Circle
    }
}

二、工厂方法模式(Factory Method)

比如日志系统,日志类型不同,用不同工厂生产不同的日志记录器。

// 日志产品
public interface Logger {
    void log(String message);
}

// 具体日志类
public class FileLogger implements Logger {
    public void log(String message) {
        System.out.println("Log to file: " + message);
    }
}

public class ConsoleLogger implements Logger {
    public void log(String message) {
        System.out.println("Log to console: " + message);
    }
}

// 抽象工厂
public interface LoggerFactory {
    Logger createLogger();
}

// 具体工厂
public class FileLoggerFactory implements LoggerFactory {
    public Logger createLogger() {
        return new FileLogger();
    }
}

public class ConsoleLoggerFactory implements LoggerFactory {
    public Logger createLogger() {
        return new ConsoleLogger();
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        // 可切换为 FileLoggerFactory
        LoggerFactory factory = new ConsoleLoggerFactory();
        Logger logger = factory.createLogger();
        // 输出:Log to console: Hello Factory!
        logger.log("Hello Factory!");
    }
}

这两个例子分别展示了:

模式类型特点
简单工厂模式一个类集中负责所有对象的创建
工厂方法模式每种产品由不同的工厂创建,便于扩展
Last Updated:
Contributors: hello0709
Prev
单例模式
Next
策略模式