工厂模式(Factory pattern)
工厂模式是比较常用的设计模式之一,那么什么叫工厂模式呢?简单来说,就是你需要什么东西不直接使用 new 的方法生成实例,然后统一通过工厂进行生产加工再生成实例。
工厂模式的实例
比如我们现在有很多形状比如圆形,矩形和正方形。这类都是属于形状,那我们是不是可以通过专门生产形状的工厂来生成它们的实例呢?
那么接下来,我们可以建立一个专门生产形状的工厂来生产它们了。即根据字符串来生产对应需要的类。在这里可以看到类的出口都已经在一个方法中了。
那么我们需要使用的时候,就可以直接只需要 new 出来一个工厂,在根据字符串就能拿到对应的需要生产的类类。而不需要分别对类进行 new。
工厂模式的优势
那么使用工厂模式的好处也是显而易见的,比如实例的生产比较复杂,或者说生成实例后还需要额外加工,这个时候工厂给了我们一个统一的出入口,也方便了日后对这个实例的修改。比如你要修改工厂产出是一个单例的时候,就不需要在所有的类中修改,而只要在工厂出口修改即可达到目标。
抽象工厂模式(abstract Factory Pattern)
抽象工厂模式,简单来说就是工厂的工厂,因为一般来说一个工厂只负责加载一类组件,那么你有很多小类组件需要生产,那么势必会有很多小类的工厂。那么你最终生产一个大类,那就要很多小类的工厂负责生产。那么如何更方便的管理或者说生产这些工厂呢?那就用生产工厂的工厂来生成吧。
抽象工厂的实例
先生成形状工厂
这时候你已经有形状了,但你觉得不美观,你还需要颜色,那么你这个时候,你又搞了个颜色工厂,如下:
颜色工厂好了,但是你担心,以后工厂多了,不好管理咋办,那还是走之前的套路,把工厂通过抽象工厂生产出来。如下:
那么这个时候和上文一样只需要new出一个抽象工厂,就能把所有需要的东西拿到手了:
抽象工厂模式的优势
使用抽象工厂模式的好处和工厂模式的好处很相似,给工厂做了一个统一的出入口,也方便了日后对这个工厂的修改。