补上一个例子https://dev.tencent.com/u/gebibanxiaoming/p/DesignPatterns/git
作为一个瞎写的楼主今天说一说我对标题这哥仨的理解。
单独说一个的很多了,但是总是越看越混,最后懵逼,这里我希望说一下我对他们的一些理解,不具体说代码。
简单工厂:简单的说写了一个创建方法创建了一类东西,具体创建的是哪个,这个方法上会有一个参数,根据这个参数再判断具体生成那个。
那我们最熟悉的页面说吧,你有一个tableView,但是他们的头试图不一样,有三种头试图对应三种情况。这里我们就可以使用简单工厂了。
简单工厂:
第一步:首先抽离一下三种头试图共有的东西,比如都是通过一个方法来设置数据的。这样就生成了一个协议,当然你写成一个类也可以。
第二步:实现(继承)上面的协议(类),具体写一下三个头试图的具体类。
第三步:写一个方法,方法返回值是基础的协议(父类),来一参数用来在方法中判断创建三种头试图的哪一种就可以了。ps:一般这个参数写成一个枚举类型。
还是用上面头试图的例子。这次换成工厂方法来实现
工厂方法:
第一步:同上。
第二步:同上。
ps:上面两步总结一下是对工厂产品的实现,下面是对工厂的操作。刚刚简单工厂的那个方法里有一个判断,这里就是把这个判断去掉,
第三步:创建一个工厂的基本协议(类),来一个方法返回值是基础的协议(父类),但是这里没有那个参数了。
第四步:实现(继承)工厂的协议(类),具体把每一种头试图对应一个工厂实例。每一种头试图的创建由对应的工厂来实现。
对比一下啊。工厂方法相当于把简单工厂的创建方法拆分成到三个子类去写了。当然具体的好处不是表面写的这样简单。
要说抽象工厂我得把例子改一下,还是那个tableView,现在对应三种情况时,他们的头试图和尾试图要一起变化。就是从头试图的改变,变成了一组头尾试图的改变。
步骤这里我就不写了,简单的说就是把一种工厂产品变成了两种工厂产品。流程上和工厂方法是一样一样的。
文章最后还是那句话,我一种想用自己的理解来简便的说清楚一些事情,所以有些地方可能说的就不对,希望大神指出