引言
设计模式是软件开发中用于解决常见问题的典型解决方案。在 Java 中,工厂模式和抽象工厂模式是创建型模式中非常核心的模式,它们主要用于对象的创建,有助于增加程序的灵活性和扩展性。本博客将详细介绍这两种模式的概念、区别以及如何在实际项目中应用这些模式。
工厂模式(Factory Pattern)
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是通过使用一个共同的接口来指向新创建的对象。
概念
- 工厂:负责创建某类对象的实例。
- 产品:工厂创建的对象通常实现同一个接口或继承同一个抽象类。
应用场景
当系统中需要更多的灵活性来决定如何创建、组合和表示对象时,特别是当这些决定需要在运行时做出时,工厂模式非常有用。
示例代码
java复制代码
interface Shape {
void draw();
}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
class ShapeFactory {
// 使用 getShape 方法获取形状类型的对象
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
}
return null;
}
}
// 客户端代码
public class FactoryDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
// 获取 Circle 的对象,并调用它的 draw 方法
Shape shape1 = shapeFactory.getShape("CIRCLE");
shape1.draw();
// 获取 Rectangle 的对象,并调用它的 draw 方法
Shape shape2 = shapeFactory.getShape("RECTANGLE");
shape2.draw();
}
}
抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式是工厂模式的扩展,它用于创建一系列相关或相互依赖的对象。不像工厂模式单一地创建一个对象,抽象工厂模式可以创建一系列相关的对象。
概念
- 抽象工厂:提供一个接口,用于创建相关的对象家族而不需明确指定具体类。
- 具体工厂:实现抽象工厂的操作以创建具体的产品对象。
示例代码
java复制代码
interface Button {
void paint();
}
interface GUIFactory {
Button createButton();
}
class WinButton implements Button {
public void paint() {
System.out.println("Render a button in a Windows style.");
}
}
class MacOSButton implements Button {
public void paint() {
System.out.println("Render a button in a MacOS style.");
}
}
class WinFactory implements GUIFactory {
public Button createButton() {
return new WinButton();
}
}
class MacOSFactory implements GUIFactory {
public Button createButton() {
return new MacOSButton();
}
}
// 客户端代码
public class AbstractFactoryDemo {
public static void main(String[] args) {
GUIFactory factory = new WinFactory();
Button button = factory.createButton();
button.paint();
factory = new MacOSFactory();
button = factory.createButton();
button.paint();
}
}
结论
工厂模式和抽象工厂模式都是创建型设计模式,它们帮助将对象创建代码与使用代码分离,增加了系统的灵活性和扩展性。工厂模式适用于不同情况下需要创建许多类型的对象,而抽象工厂模式适用于创建一系列相关或依赖对象的情况。掌握这些模式,可以在开发大型软件系统时,有效地管理对象的创建,使得代码更加清晰且容易维护。