作者:皮皮美2_160 | 来源:互联网 | 2013-08-05 09:31
种种工厂模式要解决的问题致力于解决一个基本问题:构造一个类的时候,必须知道其具体的类名。这是一种耦合。
1.简单工厂模式:通过想工厂方法传递一个参数来确定生成那个具体的类。这个参数通常是一个字符串。将对类名的依赖转换成对字符串内容的依赖,这无疑降低了耦合性;
2工厂方法模式:一个工厂类有很多子类。工厂方法设为虚函数,不同的工厂子类在其工厂方法中生成对应的产品子类。这样,我们有了一个工厂类的指针时,就可以用于动态地生成所需的产品子类了;
3.原型模式:工厂方法的最大缺点就是,对应一个继承体系的产品类,要有一个同样复杂的工厂类的继承体系。我们可以把工厂类中的工厂方法放到产品类自身之中吗?如果这样的话,就可以将两个继承体系为一个。这也就是原型模式的思想,原型模式中的工厂方法为clone,它会返回一个拷贝(可以是浅拷贝,也可以是深拷贝,由设计者决定)。为了保证用户代码中到时可以通过指针调用clone来动态绑定地生成所需的具体的类。这些原型对象必须事先构造好。
原型模式想对工厂方法模式的另一个好处是,拷贝的效率一般对构造的效率要高。
4.抽象工厂模式:通常由工厂方法模式来实现。但一个工厂中往往含有多个工厂方法生成一系列的产品。这个模式强调的是客户代码一次保证只使用一个系列的产品。当要切换为另一个系列的产品,换一个工厂类即可。
除了用工厂方法模式来实现抽象工厂模式外,也可以用原型模式来实现