简单工厂模式,工厂方法模式,抽象工厂模式的区别

简单工厂中只有一个工厂,该工厂有一个创建产品的方法。根据传入参数不同,返回不同产品。

举个例子:一个电视机工厂,根据客户的需要,生产海尔电视机,三星电视机。

如果要新增一个产品,需要修改创建产品的方法。如果产品种类太多,代码会显得很笨重,不易维护。违背了开放-封闭原则。

工厂方法模式是对简单工厂的升级,将工厂抽象出来,工厂基类定义创建产品的方法。每个工厂都需要实现该方法。每个产品对应一个工厂,一个工厂只生产对应产品。

举个例子:只要是工厂都要能生产电视机。海尔工厂生产海尔电视机,三星工厂生产三星电视机。

如果要新增一个产品,只需要新增对应的工厂和方法即可。遵循了开放-封闭原则。但是每新增一个产品都需要新增对应的工厂。

抽象工厂模式是对工厂方法模式的升级。工厂基类除了定义创建电视机方法,还定义了创建微波炉的方法。

举个例子:只要是工厂都要能生产电视机和微波炉。海尔工厂生产海尔电视机,海尔微波炉。三星工厂生产三星电视机,三星微波炉。

如果要新增一个产品,也只需要新增对应的工厂和方法即可。这个层面上遵循了开放-封闭原则。

但是如果需要对工厂基类进行扩展,实现生产冰箱的话。则需要对各个工厂都进行修改。

三个设计模式各有利弊,需要根据场景进行使用。简单工厂用于生产少量的产品,等产品数量到了一定规模可以考虑使用工厂方法替代。工厂方法之后也可以升级为抽象工厂模式。

posted @ 2019-04-09 22:52  菲菲菲菲菲常新的新手  阅读(311)  评论(0编辑  收藏  举报