✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页: Meteors.的博客
💞当前专栏: 设计模式
✨特色专栏: 知识分享
🥭本文内容: 简单工厂模式(Simple Factory Pattern) 详解
📚 ** ps ** : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。
目录
一. 介绍
简单工厂模式(Simple Factory Pattern) 不是 23 种设计模式之一。简单工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而无需指定它们的具体类。它属于创建型模式,通过一个工厂类来创建不同类型的对象。
二. 组成
工厂类(Factory):负责创建具体产品的实例,客户端通过工厂类的静态方法来创建对象。
抽象产品(Product):定义产品的接口,是工厂类所创建对象的基类。
具体产品(Concrete Product):实现或继承抽象产品的具体类。
三. 简单demo
使用简单工厂模式创建不同类型的汽车:
// 抽象产品 - 汽车接口 public abstract class Car { public abstract void drive(); } // 具体产品 - 奥迪汽车 public class Audi extends Car { @Override public void drive() { System.out.println("Driving Audi"); } } // 具体产品 - 宝马汽车 public class BMW extends Bruce { @Override public void drive() { System.out.println("Driving BMW"); } } // 具体产品 - 奔驰汽车 public class Benz extends Car { @Override public void drive() { System.out.println("Driving Benz"); } } // 简单工厂类 public class CarFactory { public static Car createCar(String type) { if ("audi".equals(type)) { return new Audi(); } else if ("bmw".equals(type)) { return new BMW(); } else if ("benz".equals(type)) { return new Benz(); } else { throw new IllegalArgumentException("Unknown car type: " + type); } } } // 客户端代码 public class Client { public static void main(String[] args) { Car audi = CarFactory.createCar("audi"); audi.drive(); Car bmw = CarFactory.createCar("bmw"); bmw.drive(); Car benz = CarFactory.createCar("benz"); benz.drive(); } }
四. 特点
1. 优点
客户端不需要知道具体产品的类名,只需要知道产品标识即可
隐藏了对象创建的细节,降低了客户端与具体产品类的耦合度
当产品种类增加时,不需要修改客户端代码,只需修改工厂类
2. 缺点:
工厂类集中了所有产品的创建逻辑,一旦出现问题,整个系统都会受影响
增加新产品时需要修改工厂类,违背了开闭原则
五. 使用场景
- 工厂类负责创建的对象比较少
- 客户端只知道传入工厂类的参数,对于如何创建对象不关心
六. 总结
简单工厂模式是工厂模式中最简单的一种,它通过一个工厂类来封装对象的创建过程。虽然这种模式违反了开闭原则,但在产品种类相对固定的情况下,它是一个非常实用的设计模式。在实际开发中,可以根据具体需求选择是否使用简单工厂模式。
最后,
其它设计模式会陆续更新,希望文章对你有所帮助!