创建型模式之——工厂模式

  设计模式中我们将工厂模式分了三种:简单工厂模式,工厂方法模式,抽象工厂模式。其实我们可以看作两类,也就是工厂方法模式和抽喜工厂模式,(他们两个都属于创建型模式,就写在一起对照参考)将简单工厂模式看成是工厂方法模式中的一个特例。下面我们来对比工厂方法模式和抽象工厂模式。

  首先我们以一个例子为参考,看一下工厂方法模式的结构图

   我们用工人种蔬菜这个例子,最开始,规模小只有一类蔬菜,可以用简单工厂模式(也称静态工厂方法模式),只需要减少工人的工作量,下达种植的命令就行了。

但是这个模式如果出现新的类型产品,每增加一种,都要修改原有的工厂类中的代码,违背了开闭原则。

随着种植场的发展,新增加一种植物类型,与第一种植物类型不相同,就需要两个工厂来分别进行种植,一个工厂负责一种类型

为了解决简单工厂的违背开闭原则,工厂方法模式来了,它去掉了简单模式中的静态属性,使工厂可被子类继承这样工厂的压力由他的工厂子类来分担

但是问题又出现了,虽然分担了压力,但是如果我们的种类过多那么,就会出现很多的工厂对象,这会影响我们的程序运行速度。

 

上面我们说了简单工厂模式和工厂方法模式

伴随时代进步,科学发展,出现了转基因蔬菜,种植场开始种植两种不同方向的农作物,在我们的蔬菜这个抽象类上面又加了一层次,但是我们无法把它作为一个层来解决,所以采用抽象工厂的方式

当每个抽象产品都有多于一个的具体子类的时候(基因有两种,蔬菜类型有两种),工厂怎么知道实例化哪一个子类呢?抽象工厂提供了两个具体工厂:转基因和非转基因工厂,对应了这两个具体产品角色,每一个具体工厂只负责一个产品角色的实例化,每一个具体工厂只负责创建抽象产品的一个具体子类的实例。

 

无论简单工厂模式、工厂方法模式、还是抽象工厂模式,他们都属于工厂模式,形式上极为相似,最终目的都是通过增加层次来减少耦合。这也就是为什么他们属于创建型模式。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值