Java简单工厂模式详细解释
简介
简单工厂模式是创建型模式的一种,它提供了一种创建对象的最佳方法。在简单工厂模式中,我们在创建对象的时候不会对客户端暴露创建逻辑,而是通过一个公共的静态方法返回一个新的对象。简单工厂模式属于类的创建型模式,在工厂类中,选择创建哪一种产品类的实例化是由工厂来决定的,而并非由客户端来决定。
实现
简单工厂模式的实现需要下面几个角色:
- 工厂角色。它是包含所有产品创建的逻辑的核心部分。对客户端隐藏了实例化产品的细节。
- 抽象产品角色。产品必须实现的接口或者抽象类,客户端通过它访问产品的功能。
- 具体产品角色。抽象产品的具体实现类,客户端通常创建并使用具体产品。
下面是一个简单的示例:
interface Car {
void drive();
}
class Lamborghini implements Car {
public void drive() {
System.out.println("Lamborghini is driving");
}
}
class Ferrari implements Car {
public void drive() {
System.out.println("Ferrari is driving");
}
}
class CarFactory {
static Car createCar(String type) {
if (type.equalsIgnoreCase("lamborghini")) {
return new Lamborghini();
} else if (type.equalsIgnoreCase("ferrari")) {
return new Ferrari();
} else {
throw new IllegalArgumentException("Unknown car type");
}
}
}
在上面的示例中,我们定义了一个接口Car
,和两个实现了这个接口的具体产品类Lamborghini
和Ferrari
。我们还定义了一个简单工厂类CarFactory
,它有一个静态createCar()
方法,根据传递的参数type
来创建具体的产品。
下面是一个客户端使用简单工厂模式的示例:
class Client {
public static void main(String[] args) {
Car lamborghini = CarFactory.createCar("lamborghini");
lamborghini.drive();
Car ferrari = CarFactory.createCar("ferrari");
ferrari.drive();
}
}
输出:
Lamborghini is driving
Ferrari is driving
示例
下面再给出一个更加具体的示例,通过使用简单工厂模式来创建日志记录器。
interface Logger {
void log(String message);
}
class FileLogger implements Logger {
public void log(String message) {
System.out.println("File Logger: " + message);
}
}
class ConsoleLogger implements Logger {
public void log(String message) {
System.out.println("Console Logger: " + message);
}
}
class LoggerFactory {
static Logger createLogger(String type) {
if (type.equalsIgnoreCase("file")) {
return new FileLogger();
} else if (type.equalsIgnoreCase("console")) {
return new ConsoleLogger();
} else {
throw new IllegalArgumentException("Unknown logger type");
}
}
}
在上面的示例中,我们定义了一个接口Logger
,和两个实现了这个接口的具体产品类FileLogger
和ConsoleLogger
。我们还定义了一个简单工厂类LoggerFactory
,它有一个静态createLogger()
方法,根据传递的参数type
来创建具体的产品。
下面是一个客户端使用简单工厂模式的示例:
class Client {
public static void main(String[] args) {
Logger fileLogger = LoggerFactory.createLogger("file");
fileLogger.log("This is a log record of file logger");
Logger consoleLogger = LoggerFactory.createLogger("console");
consoleLogger.log("This is a log record of console logger");
}
}
输出:
File Logger: This is a log record of file logger
Console Logger: This is a log record of console logger
总结
简单工厂模式是一种简单但有效的创建型模式,它允许客户端和具体的产品实现分离,因此减少了客户端的依赖程度。虽然简单工厂模式的实现很简单,但是它仍然有很强的可扩展性,因为可以通过增加新的产品类和修改工厂类来扩展系统的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java简单工厂模式详细解释 - Python技术站