阅读量:2
简单工厂模式(Simple Factory Pattern)详解
在软件开发中,我们经常需要根据不同的需求创建不同的对象实例。为了让代码更加灵活和可维护,设计模式提供了多种创建对象的方式,其中简单工厂模式(Simple Factory Pattern)就是一种常见且实用的方式。
什么是简单工厂模式?
简单工厂模式是由一个工厂类根据传入的参数,决定创建哪一种产品类的实例。这种模式将实例化对象的逻辑集中到一个工厂类中,使得客户端代码从直接创建对象的过程中解耦出来,简化了对象创建的过程。
示例:创建不同类型的形状对象
为了更好地理解简单工厂模式,我们来看一个具体的示例:假设我们需要创建不同类型的形状对象,比如圆形(Circle)、矩形(Rectangle)和正方形(Square)。
第一步:定义形状接口
首先,我们定义一个形状接口(Shape),所有具体的形状类都实现这个接口。
public interface Shape { void draw(); }
第二步:创建具体的形状类
接下来,我们创建实现 Shape
接口的具体形状类,比如 Circle
、Rectangle
和 Square
。
public class Circle implements Shape { @Override public void draw() { System.out.println("Drawing a Circle"); } } public class Rectangle implements Shape { @Override public void draw() { System.out.println("Drawing a Rectangle"); } } public class Square implements Shape { @Override public void draw() { System.out.println("Drawing a Square"); } }
第三步:创建工厂类
然后,我们创建一个工厂类(ShapeFactory),它包含一个静态方法,根据参数返回不同的形状对象。
public class ShapeFactory { public static Shape createShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } else if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } return null; } }
第四步:使用工厂类创建形状对象
最后,我们在客户端代码中使用工厂类来创建不同的形状对象,而不是直接实例化具体的形状类。
public class Client { public static void main(String[] args) { Shape shape1 = ShapeFactory.createShape("CIRCLE"); shape1.draw(); Shape shape2 = ShapeFactory.createShape("RECTANGLE"); shape2.draw(); Shape shape3 = ShapeFactory.createShape("SQUARE"); shape3.draw(); } }
总结
简单工厂模式通过一个工厂类集中管理实例化对象的逻辑,使得客户端代码不需要直接与具体类打交道,只需要知道工厂类和接口/抽象类即可。这种模式的优点在于代码清晰、维护方便,但也有一些缺点,如工厂类可能会变得复杂,并且违反了开闭原则,因为每次添加新的具体类时都需要修改工厂类的代码。