<Head First 设计模式>笔记

4.工厂模式

目的在于将对象创建过程给封装,这样子对于很多地方需要复用创建“这种对象”的地方,可以拿来即用

定义一个类,包装创建对象的代码,这个类就是工厂,提供出来一个方法用于创建类。有时候把这个方法定义成静态的,这样子在创建对象时,就不用创建工厂类对象,而直接调用工厂创建对象方法。(这个实际上并不是工厂模式,而只是一种编程方法,即简单工厂方法)

或者定义工厂方法,在一个抽象类中,有一个抽象方法(含有或者不含有参数),子类扩展这个方法的时候,在这个方法里面创建并且返回对象,这个方法就是工厂方法。方法的参数指定了创建什么样的对象。抽象类有部分的方法是直接集成并且不可被扩展子类修改的(可以声明成final方法),这些方法其中调用了工厂方法并且使用其返回的创建的对象。工厂方法让类把实例化推迟到了子类中进行

工厂方法创建返回的类,也应该是一个经过扩展的类,可以看过是一个产品群。这个产品有一个产品抽象类,然后扩展成各种各样的子类,即各种产品模板。工厂方法根据参数的不同而创建不同的产品后返回给调用者。调用者通过多态的性质声明的是产品抽象类,随后被一个具体的产品类给赋值。调用者拿到这个产品后,开始自己的使用过程。这个即产品的“实现”和“使用”解耦

工厂方法不一定都是抽象的。可以定义成非抽象的,这样的话,即使抽象类没实现子类,也可以通过这个默认的工厂方法来创建对象

工厂方法模式(Factory Method Pattern)通过让子类决定该创建的对象是什么,来达到将对象创建过程封装的目的

工厂方法模式和简单工厂的区别在于,简单工厂将对象创建的过程固化复用,但是不具有弹性,如果根据不同的情景,对于对象创建的过程也有需要修改,那么只能通过工厂方法模式来实现,因为工厂方法模式是通过不同的子类来实现对象创建过程的,所以这个过程是弹性的可变的

抽象工厂模式(Abstract Factory Pattern)通过提供一个接口来创建一组相关的产品或者依赖对象的产品,而不需要明确指明具体类。抽象工厂模式一般都是通过工厂方法来实现的。抽象工厂模式所创建的接口,里面的方法是抽象的方法(负责创建产品的一组方法),也就是工厂方法,这些工厂方法各个都负责创建具体产品

参考(http://www.cnblogs.com/ayqy/p/3960838.html

 

posted @ 2014-09-11 14:54  soaringEveryday  阅读(128)  评论(0编辑  收藏  举报