前言
大家好,我是练习两年半的Java练习生,最近阅读了《深入浅出设计模式(中文版)》,学习了各种设计模式,所以想出一个专栏和大家分享一下!
如果大家觉得文章还可以,欢迎关注点赞!后续还会陆续更新!!
一、定义
工厂方法模式定义了一个创建对象的接口(广义),但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类,注意这里工厂方法模式有多个工厂类。
二、类图
三、应用
3.1 需求
使用工厂方法模式来创建不同类型的日志记录器
3.2 分析
使用工厂方法模板的话,我们通过不同的工厂获取不同的日志记录器
3.3 实现
首先,我们需要定义一个抽象的Logger接口,它定义了用于记录日志的方法:
public interface Logger {
void log(String message);
}
然后,我们创建两个具体的Logger实现类:ConsoleLogger和FileLogger:
public class ConsoleLogger implements Logger {
public void log(String message) {
System.out.println("[Console] " + message);
}
}
public class FileLogger implements Logger {
public void log(String message) {
System.out.println("[File] " + message);
}
}
接下来,我们定义一个LoggerFactory接口,它定义了一个工厂方法createLogger(),该方法返回Logger对象:
public interface LoggerFactory {
Logger createLogger();
}
现在,我们可以创建两个具体的LoggerFactory实现类:ConsoleLoggerFactory和FileLoggerFactory:
public class ConsoleLoggerFactory implements LoggerFactory {
public Logger createLogger() {
return new ConsoleLogger();
}
}
public class FileLoggerFactory implements LoggerFactory {
public Logger createLogger() {
return new FileLogger();
}
}
最后,我们可以在客户端代码中使用工厂方法来创建Logger对象:
LoggerFactory factory = new ConsoleLoggerFactory();
Logger logger = factory.createLogger();
logger.log("Hello, world!");
在上面的代码中,我们首先创建一个ConsoleLoggerFactory对象,然后调用其createLogger()方法来创建一个ConsoleLogger对象。最后,我们调用Logger对象的log()方法来记录一条日志。
如果我们要更改日志记录方式,只需要创建一个新的LoggerFactory实现类,并修改客户端代码来使用它即可。这种方法使得代码更加灵活、可扩展和易于维护。
四、问题
简单工厂模式了解过吗?和工厂方法模式有什么区别?
工厂方法模式有什么好处?
五、总结
以上就是今天要讲的内容,本文简单介绍了设计模式中很常见的工厂方法模式。工厂方法模式的作用是将对象的创建过程封装起来,从而隐藏对象创建的细节,让客户端通过调用工厂方法来获取所需的对象,而无需了解具体的创建过程。
后面我们会讲简单工厂模式还有抽象工厂模式,到时我们就可以看到这些模式的区别和相同之处啦!