哇塞码农设计模式系列 -- 工厂方法模式

更新于2024-11-05 08:01:006 分钟3 千字2401105600
摘要

工厂方法模式

工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建委托给子类的方法,使得一个类的实例化延迟到其子类。这种模式解决了创建对象时需要决定使用哪个具体类的问题。

在工厂方法模式中,有以下几个关键角色:

  1. Product(产品):定义了工厂方法模式创建的对象的接口。
  2. ConcreteProductA 和 ConcreteProductB(具体产品):实现了 Product 接口的具体产品类。
  3. Creator(创建者):声明了工厂方法,该方法返回一个 Product 对象。
  4. ConcreteCreatorA 和 ConcreteCreatorB(具体创建者):实现了工厂方法,返回具体的 Product 对象。

UML类图

PlantUML Image

Java示例代码

// Product 接口
interface Product {
    void operation();
}

// 具体产品类 A
class ConcreteProductA implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductA operation");
    }
}

// 具体产品类 B
class ConcreteProductB implements Product {
    @Override
    public void operation() {
        System.out.println("ConcreteProductB operation");
    }
}

// 创建者抽象类
abstract class Creator {
    // 工厂方法
    abstract Product factoryMethod();
}

// 具体创建者类 A
class ConcreteCreatorA extends Creator {
    @Override
    Product factoryMethod() {
        return new ConcreteProductA();
    }
}

// 具体创建者类 B
class ConcreteCreatorB extends Creator {
    @Override
    Product factoryMethod() {
        return new ConcreteProductB();
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        // 创建具体创建者对象 A
        Creator creatorA = new ConcreteCreatorA();
        // 调用工厂方法创建产品 A
        Product productA = creatorA.factoryMethod();
        // 调用产品 A 的操作
        productA.operation();

        // 创建具体创建者对象 B
        Creator creatorB = new ConcreteCreatorB();
        // 调用工厂方法创建产品 B
        Product productB = creatorB.factoryMethod();
        // 调用产品 B 的操作
        productB.operation();
    }
}

适用场景

工厂方法模式适用于以下场景:

  1. 对象的创建需要延迟到其子类:当一个类无法预知需要创建的对象的具体类型,或者希望将对象的创建延迟到其子类时,可以使用工厂方法模式。工厂方法模式允许子类决定要创建的对象的类型。
  2. 避免与特定类耦合:当希望在代码中避免直接使用特定类,并希望通过接口或抽象类来引用对象时,可以使用工厂方法模式。工厂方法模式使得客户端代码不需要知道具体的类,只需要知道它们实现了哪些接口或抽象类。
  3. 需要在不同条件下创建不同类型的对象:当需要根据不同的条件或参数来创建不同类型的对象时,可以使用工厂方法模式。工厂方法模式允许子类根据具体情况来决定要创建的对象的类型。
  4. 需要扩展或替换对象的创建逻辑:当希望将对象的创建逻辑从客户端代码中分离出来,以便更容易地扩展或替换对象的创建逻辑时,可以使用工厂方法模式。工厂方法模式使得客户端代码只依赖于接口或抽象类,而不依赖于具体的类。

总的来说,工厂方法模式适用于需要将对象的创建延迟到其子类,并且希望通过接口或抽象类来引用对象的场景。它提供了一种灵活的方式来创建对象,同时降低了客户端代码与具体类之间的耦合度。

评论区

你认为这篇文章怎么样?
  • great
    0
  • happy
    0
  • doubt
    0
  • boring
    0
  • bad
    0

0/2048