工厂方法模式
意图:定义一个用于创建对象的接口,但让子类决定将哪一个类实例化。
例子:一个日志记录器工厂,可以创建文件日志记录器或数据库日志记录器。
以下是一个工厂方法模式的 Java 实现示例,模拟日志记录器的创建场景(支持文件日志和数据库日志):
java
// 1. 定义日志记录器接口(抽象产品)
interface Logger {
void log(String message);
}
// 2. 实现具体的日志记录器(具体产品)
class FileLogger implements Logger {
@Override
public void log(String message) {
System.out.println("文件日志记录: " + message);
}
}
class DatabaseLogger implements Logger {
@Override
public void log(String message) {
System.out.println("数据库日志记录: " + message);
}
}
// 3. 定义日志记录器工厂接口(抽象工厂)
interface LoggerFactory {
Logger createLogger();
}
// 4. 实现具体的工厂类(具体工厂)
class FileLoggerFactory implements LoggerFactory {
@Override
public Logger createLogger() {
return new FileLogger();
}
}
class DatabaseLoggerFactory implements LoggerFactory {
@Override
public Logger createLogger() {
return new DatabaseLogger();
}
}
// 5. 客户端代码
public class FactoryMethodDemo {
public static void main(String[] args) {
// 使用文件日志工厂
LoggerFactory fileLoggerFactory = new FileLoggerFactory();
Logger fileLogger = fileLoggerFactory.createLogger();
fileLogger.log("这是一条文件日志");
// 使用数据库日志工厂
LoggerFactory dbLoggerFactory = new DatabaseLoggerFactory();
Logger dbLogger = dbLoggerFactory.createLogger();
dbLogger.log("这是一条数据库日志");
}
}