从工厂模式衍生出来三种相似而又有所不同的工厂模式:
1.简单工厂模式,这中有人说它是一种编程习惯,而不是设计模式;
2.抽象工厂模式,提供一个接口,用于创建相关或依赖的家族。
3.工厂方法模式,就是定义一个创建对象的接口,但是有子类决定到底要实现哪一个具体的实例。把定义实例的时间推迟到子类中;
这三种应该是统一的,就是都定义一个接口,为客户创建实例选择不同的方法,而不需要更改代码,能够在不破坏核心代码的时候,替换相关的类实例。也就是要遵守设计原则:要依赖抽象,而不要依赖与具体的类。
而要遵守这个原则,可以从下面的几个方面来考虑:
1.任何类的指针(c++实现)都一定是指向接口即抽象类,利用类的多态性,实现动态绑定;
2.任何类的继承一定是来自接口或者抽象类,而不是具体类,减少依赖;
3.不要覆盖基类中已经实现的方法(还没有体会);
说白了,就是有客户,和各种不同的产品,工厂就是客户与产品通信的接口,产品依赖工厂,客户也要依赖工厂:
下面以一个比萨的工厂的设计与实现来说明工厂模式: