定义
在抽象工厂中声明了工厂方法,具体产品对象的创建由其子类(具体工厂)负责,客户端针对抽象工厂编程,可在运行时再指定具体工厂类。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式是一种类创建型模式。
UML图例
代码示例
// 日志记录器接口:抽象产品
public interface Logger {
public void writeLog();
}
// 数据库日志记录器:具体产品1
public class DatabaseLogger implements Logger{
public void writeLog() {
System.out.println("数据库日志记录。");
}
}
// 文件日志记录器:具体产品2
public class FileLogger implements Logger {
@Override
public void writeLog() {
System.out.println("文件日志记录");
}
}
// 日志记录器工厂接口:抽象工厂
interface LoggerFactory {
public Logger createLogger();
}
// 数据库日志记录器工厂类:具体工厂1
public class DatabaseLoggerFactory implements LoggerFactory{
@Override
public Logger createLogger() {
// 连接数据库,代码省略
// 创建数据库日志记录器对象
Logger logger = new DatabaseLogger();
// 初始化数据库日志记录器,代码省略
return logger;
}
}
// 文件日志记录器工厂类:具体工厂2
public class FileLoggerFactory implements LoggerFactory {
public Logger createLogger() {
// 创建文件日志记录器对象
Logger logger = new FileLogger();
// 创建文件,代码省略
return logger;
}
}
public class Client {
public static void main(String[] args) {
LoggerFactory factory;
Logger logger;
factory = new FileLoggerFactory();
logger = factory.createLogger();
logger.writeLog();
}
}
与简单工厂模式相比,工厂方法模式最重要的区别是引入了抽象工厂角色,抽象工厂角色可以是接口,也可以是抽象类或者具体类(少见)。
快速入口: