三种工厂模式的对比 小米工厂模式

2025-01-2107:23:24销售经验0

在软件设计模式中,工厂模式被归类于创建模式一类,其目的是对类的实例化过程进行抽象化,实现“创建与使用相分离”的原则。

工厂模式的应用场景十分广泛:

  • 凡是需要生成复杂对象的场合,都可以考虑使用工厂模式。
  • 通过工厂模式,客户端无需了解对象创建的复杂细节。

工厂模式包括三种实现方式:简单工厂模式、工厂方法模式和抽象工厂模式。它们共同的特点是通过定义一个工厂接口,将实际创建对象的工作交给具体的子工厂类来完成。

以工厂方法模式为例,它以对象创建过程为基础,根据不同的需求选择适当的工厂来创建对象。对于那些对象创建过程较为简单的情况,可以采用简单工厂模式;而对于那些涉及多个类且创建过程较为复杂的情形,则更适合使用抽象工厂模式。

为了更好地解释这一模式,我们将被创建的对象称为“产品”,而将负责创建这些产品的对象称为“工厂”。

工厂方法模式,也被称为多态工厂模式或虚拟构造器模式。其核心思想是不同的子类负责生成具体的对象,使工厂生产类符合开闭原则,而具体工厂类则符合单一职责原则。这一模式由抽象工厂、具体工厂、抽象产品和具体产品等四个角色构成。

在客户端想要得到产品实例时,只需将请求交给工厂类。工厂类会完成整个创建过程,当然这需要提前实例化具体的工厂类。

虽然工厂方法模式能够提高系统的灵活性,但也会增加系统的复杂度。当有新产品加入时,可能需要成对地增加类的数量。它更适合于那些只需要生产一个产品类的场景。

在Spring框架的源码中,工厂方法模式得到了广泛的应用。例如,FactoryBean及其子类如ListFactoryBean和MapFactoryBean,分别用于创建List和Map对象。

简单工厂模式,又被称为静态方法模式。在这种模式下,工厂类提供的是静态方法。它是工厂方法模式的一个特例。当产品体系相对有限时,无需提供复杂的工厂体系,可以通过一个工厂类的静态方法来生产有限的产品实例。

简单工厂模式由工厂、抽象产品和具体产品等三个角色构成。与工厂方法模式相比,它用一个工厂类取代了整个工厂体系。

在客户端使用时,只需调用工厂的静态方法,并告知其需要哪种产品,即可获得对应的产品实例。

尽管简单工厂模式实现了对象的创建与使用分离,但因其只有一个工厂,所以当需要添加新产品时可能会影响所有相关代码,因此并不完全符合开闭原则。

在JDK的源码中,java.util.Calendar类就使用了简单工厂模式的getInstance方法来进行实例化。

抽象工厂模式则提供了一种创建一组相关或相互依赖对象的接口。它无需指定具体类,允许产品在多个产品线(产品族)之间进行创建。可以看作是工厂方法模式的延伸,适用于需要创建的产品涉及多个产品族的场景。

在抽象工厂模式中,与工厂方法模式有相同的角色设定。产品会横向扩展为多个产品族(同时支持多等级)。工厂中会有多个创建产品实例的方法。每个具体工厂需要实现这些产品等级中所有产品的创建方法。

  • 产品等级指的是产品的种类。同种类的产品被称为同一等级,如电脑和电视。
  • 产品族则是指同一个具体工厂所生产的位于不同等级的一组产品。例如,联想和小米的产品就可以构成不同的产品族。

通过抽象工厂模式,客户端只需知道提供的接口,而无需了解创建细节。对于新增产品族的支持是符合开闭原则的。

  • 版权说明:
  • 本文内容由互联网用户自发贡献,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 295052769@qq.com 举报,一经查实,本站将立刻删除。