工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放到了一个具体类上.
简单工厂模式
将产品抽象出一个接口,在工厂函数中使用 Switch-Case 判断生产哪个具体产品,并返回具体产品的父接口引用。
工厂模式
1 除将产品抽象出一个接口以便实现多态,还将不同的工厂进行细分,统一继承自一个接口,将简单工厂中的判断移至客户端。实现了 开-闭原则。
2 客户端若使用一个工厂对象生产多个产品,简单工厂需要修改每个生产函数的参数,工厂方法模式只需修改初始化语句。
抽象工厂模式
抽象工厂是面向多个平行等级结构的,其建立对象的原则是以簇(功能相似的对象)为单位划分需要建立的对象.
1 在工厂方法模式的基础上,抽象出多个系列产品,每个系列产品都具备统一的具体产品类型组成,所有系列中的每组类型对应一个具体工厂类。
2 在更改产品类型时,只需更改一次工厂初始化语句。
3 也可用简单工厂配合抽象工厂系列,以消减工厂类的代码量。
有一个比较好理解的例子,在这跟大家介绍下:
1.如果一个后花园只种蔬菜类,那么就用简单工厂就可以了.
2.如果后花园蔬菜品种繁多.得用工厂方法才可以,把共有的东西抽象出来.
3.如果要扩大后花园的规模,比如一个在北方,一个在南方,这样工厂方法就无法实现了,就应当用抽象工厂,把各种各样的植物,又组成一个后花园.
1.简单工厂:
心得:优点是只要实现共有的接口就可以实现不同车跑的方式.但缺点就是要判断哪一种车,造成要修改Driver 类
2.工厂方法:
心得:优点是符合了开放-封闭原则(OCP),从整体上还看不出什么缺点.
3.抽象工厂:
心得:抽象方法似乎达到了完美境界.把开奔驰的司机和开宝马的司机的公共方法抽象出来,并对不同的司机创建不同的类,到时候不管是开什么车的司机随你添加.它们唯一的共同点都是开车.