侧边栏壁纸
博主头像
人生短短几个秋

行动起来,活在当下

  • 累计撰写 45 篇文章
  • 累计创建 20 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

设计模式-工厂方法模式

人生短短几个秋
2025-01-25 / 0 评论 / 0 点赞 / 16 阅读 / 0 字

设计模式 - 工厂模式(Factory Pattern)

介绍

工厂模式是一种创建型设计模式,它提供了一个创建对象的最佳方式。在工厂模式中,当创建对象时,不会对客户端暴露创建逻辑,而是通过传递一个共同的接口来指向新创建的对象。

工厂模式有两种主要类型:简单工厂模式(也称静态工厂方法模式)、工厂方法模式(Factory Method Pattern)。

实现

这里我们将以创建不同的动物实例为例,来演示这两种工厂模式的实现。

简单工厂模式

简单工厂模式使用一个工厂类负责创建所有实例。

定义接口或抽象类

public abstract class Animal {
    public abstract void makeSound();
}

创建具体实现类

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow!");
    }
}

创建工厂类

public class AnimalFactory {
    public static Animal createAnimal(String type) {
        if ("dog".equals(type)) {
            return new Dog();
        } else if ("cat".equals(type)) {
            return new Cat();
        }
        return null;
    }
}

工厂方法模式

工厂方法模式允许每个子类决定实例化哪一个类。

定义工厂接口

public interface AnimalFactory {
    Animal create();
}

创建具体工厂类

public class DogFactory implements AnimalFactory {
    @Override
    public Animal create() {
        return new Dog();
    }
}

public class CatFactory implements AnimalFactory {
    @Override
    public Animal create() {
        return new Cat();
    }
}

使用工厂方法模式

public class Client {
    public static void main(String[] args) {
        AnimalFactory factory;
        
        // 使用DogFactory创建Dog对象
        factory = new DogFactory();
        Animal dog = factory.create();
        dog.makeSound(); // 输出 "Woof!"

        // 使用CatFactory创建Cat对象
        factory = new CatFactory();
        Animal cat = factory.create();
        cat.makeSound(); // 输出 "Meow!"
    }
}

使用场景

工厂模式适用于:

  • 当一个类不知道它所必须创建的对象的确切类的时候。
  • 当一个系统应该独立于它的产品创建、构成和表示时。
  • 当一个类希望由它的子类来指定它所创建的对象的时候。

总结

工厂模式是创建型设计模式中的一种,它提供了一种创建对象的方式而不暴露创建逻辑。简单工厂模式通过静态工厂方法创建对象,而工厂方法模式则允许子类决定实例化哪个类。这两种模式都能有效地封装创建过程,使得系统的扩展更加灵活。


以上就是工厂模式的实现和应用示例,希望能帮助你更好地理解和使用这种设计模式。

0

评论区