简单工厂模式、工厂模式、抽象工厂模式
一、定义
- 简单工厂模式
实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 - 工厂方法模式
工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于 创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 - 抽象工厂模式
抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
二、为什么要使用工厂模式
创建一个对象有时候会很复杂,需要很多行代码来创建这个对象,如果需要频繁的new这个对象就会产生很多的重复代码并且使程序增加更多错误的可能,工厂模式就是要解决这些问题,通过工厂来管理创建这些对象,调用者不需要实现复杂的创建逻辑,从而将调用者与实现类解耦。
三、三种模式介绍
-
简单工厂模式
简单工厂模式并不是23种设计模式中的一种,简单工厂模式就是在工厂内实现判断并实例化对应类,被创建的实例通常都具有共同的父类,如果我们需要增加产品只需要改变工厂内的逻辑就可以,无需修改客户端,降低了调用者与实现类的依赖。类图表示如下:
-
工厂方法模式
工厂模式是对应一个单一抽象产品类和一个单一抽象工厂类,相比较简单工厂模式,它是将创建类的判断过程转移给了调用者,如果需要增加产品时候只需要创建抽象产品类和抽象工厂类并实现相关接口,无需修改原有代码,在单一产品的拓展方面更简单。类图表示如下:
-
抽象工厂模式
再说抽象工厂模式之前先引入产品簇的概念,反正我当时就没能理解好这个东西,先上图:
这里横向的就是单一产品,纵向的就是产品簇,抽象工厂模式与工厂模式的一个不同之处就是抽象工厂模式不再是只生产单一产品。抽象工厂模式,我将它理解为从工厂方法模式的一维结构上升到了抽象工厂模式的二维结构,在工厂模式对应的单一生产线的基础上又增加了产品簇的概念,所以它对应的应该是多个产品抽象类和声明多个返回实现类方法的工厂抽象类,它能够让一个工厂生产多个产品,但是修改时有相当麻烦。类图表示如下:
四、总结
我认为在刚接触时工厂方法模式与抽象工厂模式有点难以区分,其实他们就类似于电脑商城与小米之家的区别,电脑专卖店只卖电脑这一种产品,而小米之间就是小米产品这个产品簇中的多个产品,例如手机、电脑、移动硬盘等等,重点是理解产品线与产品簇的概念,当工厂方法模式加入一个新产品或方法后,由于产品构成了不同等级的产品族,就变成抽象工厂模式了。而在抽象工厂模式中,当减少一个产品或方法使得工厂提供的产品不再构成产品族后,它就演变成了工厂方法模式。三种模式的选择需要根据具体情况来定,但是他们有一个共同点就是降低耦合度。