写在前面:工厂,顾名思义,用于批量生产,创建对象。我这里以生产汽车为例。
一、简单工厂模式
这里我们直接用代码说明:
首先新建一个车辆的抽象类,内含一个抽象方法
图一
下面我们会创建两个继承car的两个子类,分别是两种不同的车型
图二
图三
下面是工厂模式的主要方法,通过传入不同的参数名称,来判断创建车辆的类型
图四
下面是工厂调用方式
图五
优点:非常简单。
缺点:功能单一,如果我们要新增车型,那么得修改图四中得主要方法。
二、工厂方法模式
现在,我们首先创建一个工厂接口,然后给每种车型都专门设定个生产工厂。
图六
图七
图八
调用方法
图九
工厂方法模式是符合开闭原则的,它可以添加并且不会修改之前的代码。明显优于简单工厂模式。
三、抽象工厂模式
当我们在处理关系较为复杂的对象时,比如说下图:
图十
我们的工厂可以生产两种(或者更多)不同的车型,我们称这些品牌一致车型却不同的产品为一个产品族。
这里声明两个接口,分别是ICar 和 ISuv ,然后分别新建两个类实现这个接口。这四个实现类也就是我们的产品。(这里我省略代码)
关键是下面的代码:
图十一
上图中的代码表示创建一个抽象类,这是一个抽象工厂,包含了两个抽象方法,分别是以ICar和ISuv接口为返回值的抽象方法。这代表会将不同型号但是品牌一致,也就是同族的对象在一个工厂中给创建出来。
然后我们创建工厂,并通过继承抽象工厂,实现抽象工厂类中的两个抽象方法:
图十二
同理得:
图十三
最后通过创建工厂调用工厂中实现的方法得到想要的对象:
图十四
一般情况下,当我们得设计是有一系列得相关对象,我们就可以使用抽象工厂模式。
小结:
工厂模式就是这三类,但是在我们使用得时候并不是说越复杂得越好,我们需要根据需求来判断用哪一种更适合,如果足够使用,当然越简单越好。