工厂方法模式(Factory Method)是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。
在Java中,工厂方法模式通常通过定义一个接口或抽象类来实现,这个接口或抽象类中声明了一个或多个用于创建对象的工厂方法。子类通过实现这个接口或继承这个抽象类并重写工厂方法来指定具体的实例化逻辑。
下面是一个简单的Java例子,演示了工厂方法模式:
1. 定义一个产品接口
public interface Product { void use();
}
2. 创建具体产品类
然后,我们创建实现了上述接口的具体产品类。
public class ConcreteProductA implements Product { @Override public void use() { System.out.println("Using ConcreteProductA"); }
} public class ConcreteProductB implements Product { @Override public void use() { System.out.println("Using ConcreteProductB"); }
}
3. 创建一个工厂接口
接着,我们定义一个工厂接口,这个接口声明了工厂方法。
public interface Creator { Product factoryMethod();
}
4. 创建实现了工厂接口的具体工厂类
最后,我们创建实现了工厂接口的具体工厂类,并重写工厂方法来返回特定类型的产品实例。
public class ConcreteCreatorA implements Creator { @Override public Product factoryMethod() { return new ConcreteProductA(); }
} public class ConcreteCreatorB implements Creator { @Override public Product factoryMethod() { return new ConcreteProductB(); }
}
5. 客户端代码
客户端代码通过工厂类来获取产品实例,并通过产品接口来使用产品。
public class Client { public static void main(String[] args) { Creator creatorA = new ConcreteCreatorA(); Product productA = creatorA.factoryMethod(); productA.use(); Creator creatorB = new ConcreteCreatorB(); Product productB = creatorB.factoryMethod(); productB.use(); }
}
在这个例子中,Creator
接口是工厂方法模式的抽象创建者角色,ConcreteCreatorA
和 ConcreteCreatorB
是具体创建者角色,Product
接口是产品角色,而 ConcreteProductA
和 ConcreteProductB
是具体产品角色。客户端代码通过具体的创建者来创建并获取具体的产品实例,然后通过产品接口来操作这些实例。