简单工厂模式 - 设计模式

什么是简单工厂模式?

简单工厂模式,也称为静态工厂方法模式,是一种常用的创建型设计模式。

在这个模式中,这个工厂类被用来创建对象,客户端以这个类为中介得到所需的对象。

这个工厂类通常有一个方法,根据客户端的需求来决定应该创建哪种产品类的实例。

代码举例

以下是简单工厂模式的一个例子,这个例子是一个动物工厂,可以创建不同类型的动物:

interface Animal {
    void speak();
}

class Dog implements Animal {
    public void speak() {
        System.out.println("汪汪!");
    }
}

class Cat implements Animal {
    public void speak() {
        System.out.println("喵喵!");
    }
}

// 工厂类
class AnimalFactory {
    public static Animal createAnimal(String type) {
        if (type.equalsIgnoreCase("dog")) {
            return new Dog();
        } else if (type.equalsIgnoreCase("cat")) {
            return new Cat();
        }
        return null;
    }
}
// 客户端
public class FactoryPatternExample {
    public static void main(String[] args) {
        Animal myDog = AnimalFactory.createAnimal("dog");
        myDog.speak();  // “汪汪!”

        Animal myCat = AnimalFactory.createAnimal("cat");
        myCat.speak();  // “喵喵!”
    }
}

在这个例子中,

AnimalFactory: 是工厂类,这个类被用来创建对象,客户端以这个类为中介得到所需的对象。

createAnimal(String type): 工厂类中的静态方法,它根据传入的字符串创建相应的 Animal 实例。

DogCat 则是具体的产品类,它们都实现了 Animal 接口。

优点

  • 简单工厂模式的主要优点是对象的创建逻辑和客户端的代码解耦。
  • 此外,如果需要添加新的产品类,只需要修改工厂方法即可,而无需修改使用这些产品的代码。

缺点

然而,简单工厂模式也有一些缺点。

  • 首先,工厂方法可能会变得非常复杂,特别是当有大量的产品类时。
  • 此外,这个模式不支持开闭原则,因为每次添加新的产品类都需要修改工厂方法。

因此,在有大量产品类且经常需要添加新产品的情况下,可能更适合使用其他的创建型模式,如工厂方法模式或抽象工厂模式。

举例JDK8使用简单工厂模式的地方

java.util.Calendar 类有几个 getInstance() 方法,根据提供的不同输入参数(如 TimeZone 和 Locale),返回不同的 Calendar 对象。

我们进入java.util.Calendar#getInstance()方法中:

在这里插入图片描述

然后进入java.util.Calendar#createCalendar方法,在这个方法内部,会根据参数决定实例化哪个类。

在这里插入图片描述
最后将这个类对象返回给请求者。

在这里插入图片描述

在java/util/Calendar.java类的内部中,有这些地方使用到了这个方法。

在这里插入图片描述

客户端只需通过调用这个类的这些方法,就可以得到需要的实例对象,而对象的创建过程被封装在了
java.util.Calendar#createCalendar这个方法中,这个方法与客户端是解耦的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值