【设计模式之禅】工厂方法模式
发布日期:2021-05-10 05:48:22 浏览次数:27 分类:精选文章

本文共 1985 字,大约阅读时间需要 6 分钟。

工厂方法模式 - 一个清晰的解释

定义

工厂方法模式(Factory Method Pattern)是一种设计模式,其核心思想是定义一个用于创建对象的接口。通过对工厂类的抽象化,子类可以决定具体要创建的对象类。这种方式使得对象的实例化过程被推迟(deferred to subclass),从而提高了系统的扩展性和灵活性。

代码示例

以下是一个简单的工厂方法模式示例:

  • AbstractProduct 抽象类

    public abstract class AbstractProduct {
    // 定义一个公共方法
    public void publicMethod() {
    // 进行某种处理
    }
    // 抽象方法,子类必须实现
    public abstract void abstractMethod();
    }
  • ConcreteProduct1 和 ConcreteProduct2 具体实现类

    public class ConcreteProduct1 extends AbstractProduct {
    public void abstractMethod() {
    // 具体实现方法
    }
    }
    public class ConcreteProduct2 extends AbstractProduct {
    public void abstractMethod() {
    // 具体实现方法
    }
    }
  • AbstractFactory 抽象工厂类

    public abstract class AbstractFactory {
    // 创建对象的方法,具体工厂需要实现该方法
    public abstract
    T createProduct(Class
    c);
    }
  • ConcreteFactory 具体工厂类

    public class ConcreteFactory extends AbstractFactory {
    public
    T createProduct(Class
    c) {
    // 实例化具体的产品类
    Product product = null;
    try {
    product = (Product) Class.forName(c.getName()).newInstance();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return (T) product;
    }
    }
  • 使用示例

    AbstractFactory factory = new ConcreteFactory();
    Product product = factory.createProduct(ConcreteProduct1.class);
    // 调用已经实例化的对象的公共方法
    product.publicMethod();

工厂方法模式的优点

  • 封装性高:工厂类通过抽象接口实现了对象的创建逻辑,遵循了迪米特法则(Demeter's Law),高层模块只关心提供的接口,不需要了解具体实现。

  • 扩展性强:只需要添加一个新的具体实现类,就能支持新的产品类型,这降低了系统扩展的门槛。

  • 依赖倒置原则:通过对工厂类的抽象化,实现类被遮盖了,系统的高度依赖于接口而非具体实现,这有助于减少依赖关系。

  • 符合里氏替换原则:抽象类可以被具体实现类替代,系统具有较高的灵活性和可维护性。

  • 代码结构清晰:工厂类和产品类之间的关系明确,便于系统的维护和扩展。

  • 工厂方法模式的变种

    根据实际需求,工厂方法模式可以有多种实现方式:

  • 简单工厂模式(Simple Factory Pattern):这种方式使用单一工厂类。通过静态方法实现对象的实例化。

  • 多工厂类(Multiple Factory Classes):针对特定的业务需求,可以创建多个工厂类,每个工厂专门生成特定类型的产品。

  • 反射工厂(Singleton Factory):通过反射机制生成单例对象,避免了多次创建带来的性能问题。

  • 延迟初始化工厂(Lazy Initialization Factory):使用内存缓存存储实例化后的对象,并通过双重锁机制保证线程安全,确保在第一次使用时才会加载类。

  • 以上差异性别增强了工厂方法模式的适用性,能够满足不同场景下的需求。

    上一篇:【剑指Offer】数组中重复的数字
    下一篇:【设计模式之禅】单例模式

    发表评论

    最新留言

    表示我来过!
    [***.240.166.169]2025年05月05日 22时55分00秒