请编写一个工厂方法模式的实际应用案例代码。
工厂方法模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
举个例子,假设我们正在开发一个日志记录系统,它可以将日志记录到不同的媒介,如数据库,文件,或者云等。我们可以使用工厂方法模式来创建适当的日志记录器。
以下是用Java实现的代码示例:
// 创建一个表示日志记录器的接口
public interface Logger {
void log(String message);
}
// 创建两种类型的日志记录器
public class FileLogger implements Logger {
public void log(String message) {
System.out.println("Writing log message to file: " + message);
}
}
public class CloudLogger implements Logger {
public void log(String message) {
System.out.println("Sending log message to cloud: " + message);
}
}
// 创建一个抽象工厂类来获取日志记录器
public abstract class LoggerFactory {
abstract Logger getLogger();
}
// 创建具体的工厂类来生成具体的日志记录器
public class FileLoggerFactory extends LoggerFactory {
Logger getLogger() {
return new FileLogger();
}
}
public class CloudLoggerFactory extends LoggerFactory {
Logger getLogger() {
return new CloudLogger();
}
}
// 在客户端
public class Client {
public static void main(String[] args) {
LoggerFactory loggerFactory = new FileLoggerFactory();
Logger logger = loggerFactory.getLogger();
logger.log("Hello, world!");
}
}
在这个例子中,LoggerFactory就是我们的工厂,它能够生成具体的Logger。这就是工厂方法模式。当我们想要改变日志记录方式时,我们只需要改变客户端中使用的工厂即可,无需修改任何日志记录的代码。这样就达到了代码解耦的目的。