>本篇介绍的是工厂模式,也是最简单我们最常使用的一种设计模式。
# 定义
工厂模式也称简单工厂模式,是创建型设计模式的一种,这种设计模式提供了按需创建对象的最佳方式。同时,这种创建方式不会对外暴露创建细节,并且会通过一个统一的接口创建所需对象。
工厂设计模式也是 Java 开发中常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子类自己决定将哪一个工厂类实例化,工厂模式使创建过程延迟到子类中进行。
为了给代码结构提供扩展性,屏蔽每一个功能类中的具体实现逻辑。这种方式便于外部更加简单地调用,同时也是去掉众多if…else的最佳手段。
当然,这种设计模式也有一些缺点,需要治理。例如需要实现的类比较多、难以维护、开发成本高等,但这些问题都可以通过结合不同的设计模式逐步优化。
# 实践
以吃水果为例。

先定义一个 IFruit 接口;
```
public interface IFruit {
void eat();
}
```
创建苹果和橙子的实现类 Apple.java 、 Orange.java
```
public class Apple implements IFruit {
@Override
public void eat() {
System.out.println("吃苹果~~");
}
}
public class Orange implements IFruit {
@Override
public void eat() {
System.out.println("吃橙子~~");
}
}
```
创建水果工厂实现类 FruitFactory.java
```
public class FruitFactory {
public IFruit getFruit(String name) {
if (name == null ) {
throw new RuntimeException("不支持的类型");
}
if ("apple".equals(name)) {
return new Apple();
}
if ("orange".equals(name)) {
return new Orange();
}
throw new RuntimeException("不支持的类型");
}
}
```
测试类
```
public class TestFactory {
public static void main(String[] args) {
FruitFactory factory = new FruitFactory();
IFruit fruit1 = factory.getFruit("apple");
fruit1.eat();
IFruit fruit2 = factory.getFruit("orange");
fruit2.eat();
}
}
```
运行代码:

这里我只是举个最简单的例子,工作中遇到的场景可能会比较复杂,大家只要知晓其原理,使用起来也就轻车熟路了。万变不离其宗~
# 总结
从优化过程来看,工厂模式并不复杂。一旦理解和掌握,会发现它更加简单,同时也可以借助它提升开发效率。
它的优点如下:
- 避免创建者与具体的产品逻辑耦合;
- 满足单一职责,每一个业务逻辑实现都在自己所属的类中完成;
- 满足开闭原则,无须更改使用调用方就可以在程序中引入新的产品类型。
缺点如下:
假如有非常多的类型,实现的子类会极速扩张,因此需要使用其他的模式进行优化,这些在后续的设计模式中会逐步介绍。
`从案例入手学习设计模式往往要比只看理论知识更容易掌握,因为案例学习是缩短理论到实践的有效方式。如果已经有所收获,一定要尝试实操,找一段业务代码练习,以验证自己的想法。`

【设计模式】工厂模式