创建型模式1.工厂方法模式

创建型模式

  1. 工厂方法模式(Factory Method Pattern)
  2. 抽象工厂模式(Abstract Factory Pattern)
  3. 建造者模式(Builder Pattern)
  4. 原型模式(Prototype Pattern)
  5. 单例模式(Singleton Pattern)

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,旨在通过定义一个接口来创建对象,而将对象的具体实例化推迟到子类中。也就是说,工厂方法模式允许客户端通过工厂方法来创建对象,但具体的创建过程由具体的子类来实现。

关键概念:

  1. 产品接口(Product):定义工厂方法所创建对象的类型。
  2. 具体产品(Concrete Product):实现了产品接口的具体类。
  3. 抽象工厂(Creator):定义一个用于创建产品对象的工厂方法,并且通常会提供一个默认实现。
  4. 具体工厂(Concrete Creator):实现了抽象工厂中的工厂方法,返回一个具体的产品。

工厂方法模式的优点:

  • 扩展性:增加新的产品时,客户端代码无需修改,只需添加新的具体工厂类。
  • 解耦:客户端不需要知道具体产品的创建过程,只需要依赖工厂方法接口。
  • 提高灵活性:允许通过多态来定制工厂行为。

示例:动物工厂

假设我们要创建一个工厂来生产不同类型的动物,基于工厂方法模式,我们会将创建动物的过程抽象化,并通过不同的子类来提供具体的实现。

1. 定义产品接口

我们先定义一个动物的接口,每种动物都必须实现这个接口。

// 产品接口:Animal
public interface Animal {
    void speak();
}
2. 定义具体产品

然后,我们创建不同种类的动物,分别实现 Animal 接口。

// 具体产品:Dog
public class Dog implements Animal {
    @Override
    public void speak() {
        System.out.println("Woof! Woof!");
    }
}

// 具体产品:Cat
public class Cat implements Animal {
    @Override
    public void speak() {
        System.out.println("Meow! Meow!");
    }
}
3. 定义抽象工厂

接下来,我们定义一个抽象的工厂类,提供工厂方法来创建动物。

// 抽象工厂:AnimalFactory
public abstract class AnimalFactory {
    public abstract Animal createAnimal();
}
4. 定义具体工厂

然后,我们定义具体的工厂类,分别实现 AnimalFactory 并提供不同的动物对象。

// 具体工厂:DogFactory
public class DogFactory extends AnimalFactory {
    @Override
    public Animal createAnimal() {
        return new Dog();
    }
}

// 具体工厂:CatFactory
public class CatFactory extends AnimalFactory {
    @Override
    public Animal createAnimal() {
        return new Cat();
    }
}
5. 客户端代码

在客户端代码中,我们不直接创建具体的动物,而是通过工厂来创建。

// 客户端代码
public class AnimalStore {
    private AnimalFactory animalFactory;

    public AnimalStore(AnimalFactory animalFactory) {
        this.animalFactory = animalFactory;
    }

    public void orderAnimal() {
        Animal animal = animalFactory.createAnimal();
        animal.speak();
    }

    public static void main(String[] args) {
        // 创建一个狗的工厂
        AnimalFactory dogFactory = new DogFactory();
        AnimalStore store1 = new AnimalStore(dogFactory);
        store1.orderAnimal();  // 输出:Woof! Woof!

        // 创建一个猫的工厂
        AnimalFactory catFactory = new CatFactory();
        AnimalStore store2 = new AnimalStore(catFactory);
        store2.orderAnimal();  // 输出:Meow! Meow!
    }
}

总结

工厂方法模式的关键在于将对象的创建过程委托给子类,而不是直接在客户端中进行对象创建。这样,工厂方法模式使得系统具有良好的扩展性:增加新的产品只需要增加新的具体工厂类,而无需修改现有的客户端代码或其他工厂类。这种模式非常适合用于需要创建一系列相关或相似对象的场景,而且可以保证系统中的对象创建过程遵循一致的方式。

相关推荐
*猪耳朵*10 小时前
Java 工厂模式、工厂方法模式、抽象工厂模式
java·工厂方法模式·抽象工厂模式·設計模式
苹果10 小时前
C++二十三种设计模式之工厂方法模式
c++·设计模式·工厂方法模式
angen20188 天前
二十三种设计模式-工厂方法模式
java·设计模式·工厂方法模式
冀晓武8 天前
C++ 设计模式:工厂方法(Factory Method)
c++·设计模式·工厂方法模式
NorthCastle12 天前
设计模式-创建型模式-工厂方法模式详解
设计模式·工厂方法模式
游客52013 天前
设计模式-创建型-工厂方法模式
开发语言·python·设计模式·工厂方法模式
ke_wu14 天前
结构型设计模式
开发语言·设计模式·组合模式·简单工厂模式·工厂方法模式·抽象工厂模式·装饰器模式
思忖小下18 天前
梳理你的思路(从OOP到架构设计)_设计模式Factory Method模式
设计模式·工厂方法模式·eit
霁月风18 天前
设计模式——工厂方法模式
c++·设计模式·工厂方法模式