工厂方法模式(Factory Method Pattern)是一种常用的创建型设计模式,它提供了一种创建对象的方式,但实际的实例化过程被推迟到了子类中。
当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。
这种模式允许类在不明确指定其对象具体类型的情况下,将对象创建的任务委托给其子类处理。
实例1:
// 假设有一个Product接口,它代表了一类产品,同时有多种具体的产品类。
// 此外,我们还需要一个创建这些产品的工厂接口,具体的工厂类将决定实例化哪个产品类。
// 产品接口
interface Product {
void performAction();
}
// 具体产品类1
class ConcreteProductA implements Product {
@Override
public void performAction() {
System.out.println("执行了产品A的操作");
}
}
// 具体产品类2
class ConcreteProductB implements Product {
@Override
public void performAction() {
System.out.println("执行了产品B的操作");
}
}
// 创建者(工厂)抽象类
abstract class Creator {
// 定义工厂方法,返回一个产品对象
abstract Product createProduct();
// 演示产品的功能
public void demoProduct() {
Product product = createProduct();
product.performAction();
}
}
// 具体创建者类1
class ConcreteCreatorA extends Creator {
@Override
Product createProduct() {
return new ConcreteProductA(); // 实例化产品A
}
}
// 具体创建者类2
class ConcreteCreatorB extends Creator {
@Override
Product createProduct() {
return new ConcreteProductB(); // 实例化产品B
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Creator creatorA = new ConcreteCreatorA();
creatorA.demoProduct(); // 输出:执行了产品A的操作
Creator creatorB = new ConcreteCreatorB();
creatorB.demoProduct(); // 输出:执行了产品B的操作
}
}