工厂模式是一种创建型设计模式,它通过一个共同的接口来指向类对象的创建过程。在工厂模式中,我们可以将工厂分为三种类型:抽象工厂、具体工厂和简单工厂。抽象工厂是所有子类的工厂,它定义了创建一系列相关或相互依赖对象的接口;具体工厂则负责根据抽象工厂的接口创建具体的产品对象;简单工厂则不包含任何特定类型的产品,它只负责创建产品对象并返回。
本文目录导读:
工厂模式(Factory Pattern)是一种创建型设计模式,允许在不指定具体类的情况下创建对象,这种模式的核心思想是定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得类的实例化推迟到其子类中进行,从而提供了一种在运行时选择合适类版本的能力。
工厂模式的特点
1、扩展性:通过继承和多态性,工厂模式可以很容易地添加新的产品类。
2、灵活性:客户端可以选择使用哪种产品,而无需知道具体的实现细节。
3、封装:产品的创建过程被封装在工厂类内部,客户端不需要了解这些细节。
4、控制复杂性:将对象的创建逻辑从使用它的代码中分离出来,减少了代码的复杂性。
工厂模式的组成部分
抽象工厂(Abstract Factory):定义了创建一系列相关或相互依赖对象的接口。
具体工厂(Concrete Factory):实现抽象工厂接口,并负责创建具体的产品。
产品(Product):表示要创建的对象。
客户端(Client):请求创建产品的对象。
工厂模式的应用
简单工厂
最简单的工厂模式是只包含一个抽象工厂类和一个具体工厂类,假设有一个ShapeFactory
来创建不同的形状(如圆形、正方形等),那么CircleFactory
和SquareFactory
就是具体工厂类。
public abstract class ShapeFactory { public abstract Shape createShape(); } public class CircleFactory implements ShapeFactory { @Override public Shape createShape() { return new Circle(); } } public class SquareFactory implements ShapeFactory { @Override public Shape createShape() { return new Square(); } }
工厂方法
在工厂方法模式中,抽象工厂类定义了一个用于创建其子类中某个对象的方法,这允许客户端调用这个方法来获取所需的产品。
public abstract class AbstractShapeFactory { public abstract Shape createShape(); } public class CircleFactory extends AbstractShapeFactory { @Override public Shape createShape() { return new Circle(); } } public class SquareFactory extends AbstractShapeFactory { @Override public Shape createShape() { return new Square(); } }
抽象产品
抽象产品是一个接口,它定义了所有产品共有的属性和方法,具体产品类实现了这个接口,提供具体的实现。
public interface Shape { void draw(); } public class Circle implements Shape { @Override public void draw() { System.out.println("Drawing a circle"); } } public class Square implements Shape { @Override public void draw() { System.out.println("Drawing a square"); } }
工厂方法
工厂方法模式与工厂方法模式类似,但更强调在创建过程中的参数化。
public class ShapeFactoryMethod { public Shape getShape(String shapeType) { if (shapeType == null) { throw new IllegalArgumentException("Shape type cannot be null"); } switch (shapeType) { case "circle": return new Circle(); case "square": return new Square(); // ... other shapes can be added as needed default: throw new IllegalArgumentException("Invalid shape type"); } } }
工厂模式为创建对象提供了一种灵活且易于扩展的方式,通过定义一个接口,允许多个具体类实现相同的功能,工厂模式能够适应不断变化的需求,同时保持代码的整洁和可维护性,无论是简单的单一产品还是复杂的多产品环境,工厂模式都能够提供有效的解决方案。